标题: [转] SQL Server中的行列转换问题
- temptation 2008-03-25 13:17 阅读:150
- 评论:1 查看评论 | 添加评论
原表结构
序号 性别 部门 工资
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 END) as 男,
[图片]           SUM(CASE 性别 WHEN 2 THEN 1 ELSE 0 END) as 女,
[图片]     SUM(CASE SIGN(工资-800) WHEN -1 THEN 1 ELSE 0 END) as 小于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(工资-1200) WHEN 1 THEN 1 ELSE 0 END)
[图片]     +(CASE 工资 WHEN 1200 THEN 1 ELSE 0 END)) as 大于1200元
[图片]FroM 工资明细表 
[图片]GROUP BY 部门名


查看评论 | 添加评论
返回顶部 | 返回首页