[转] SQL Server中的行列转换问题

原表结构
序号
1 a 800
2 b 900
3 a 400
4 d  1400
5 e 1200
6 f 500
7 a  300
8 d 1000
9 d 1230
10 b 2000
11 c 2000
12 b 1200

最终显示
  人数                    小于800元  从800至999  从1000元至1190元     大于1200元
a          3 2 1 2 1 0 0
b         3 1 2 0 1 0 2
c          1 1 0 0 0 0 1
d         3 1 2 0 0 1 2
e         1 1 0 0 0 0 1
f          1 1 0 1 0 0 0

SELECT 部门名,COUNT(序号) as 人数,
     
SUM(CASE 性别 WHEN 1 THEN 1 ELSE 0 ENDas 男,
           
SUM(CASE 性别 WHEN 2 THEN 1 ELSE 0 ENDas 女,
     
SUM(CASE SIGN(工资-800WHEN -1 THEN 1 ELSE 0 ENDas 小于800元,
     
SUM((CASE SIGN(工资-800)*SIGN(工资-1000)                     /*用*来实现<和>功能*/
          
WHEN -1 THEN 1 ELSE 0 END)+(CASE 工资
          
WHEN 800   THEN 1 ELSE 0 END)) as 从800至999,          /*注意别名不能以数字开头*/
     
SUM((CASE SIGN(工资-1000)*SIGN(工资-1200)
          
WHEN -1 THEN 1 ELSE 0 END)+(CASE 工资
          
WHEN 1000 THEN 1 ELSE 0 END)) as 从1000元至1199元,
     
SUM((CASE SIGN(工资-1200WHEN 1 THEN 1 ELSE 0 END)
     
+(CASE 工资 WHEN 1200 THEN 1 ELSE 0 END)) as 大于1200元
FroM 工资明细表 
GROUP BY 部门名

原文地址:https://www.cnblogs.com/temptation/p/1121149.html