2013-08-21 43 views
0

有谁知道一个简单的方法来创建此结果的支点:我想显示SQL服务器 - 简单的方法来创建数据透视

SELECT [0-1] = SUM(CASE WHEN AGE >= 0 AND AGE <= 1 THEN 1 ELSE 0 END), 
     [1-2] = SUM(CASE WHEN AGE > 1 AND AGE <= 2 THEN 1 ELSE 0 END), 
     [2-3] = SUM(CASE WHEN AGE > 2 AND AGE <= 3 THEN 1 ELSE 0 END) 
    FROM dbo.Persons 

[0-1] [1-2] [2-3] [3-4] 
12  45  29 5 

这一结果与查询创建列值作为行即输出应该是这样的:

[0-1]  12 
[1-2]  45 
[2-3]  29 
[3-4]  5 

链接到文章/博客也欢迎。请建议一个简单易用的解决方案。

回答

1

下面是一个使用cross join和聚集的方式:我喜欢这种方法,因为它很容易增加新的年龄范围

select ages.minage, ages.maxage, 
     sum(case when age > ages.minage and age <= ages.maxage then 1 else 0 end) as cnt 
from dbo.Persons cross join 
    (select -1 as minage, 1 as maxage union all 
     select 1, 2 union all 
     select 2, 3 
    ) as ages 
group by ages.minage, ages.maxage 

。注意这还包括范围。

+0

出现错误:“列'ages.minage'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。” – user1254053

相关问题