注册 登录
编程论坛 SQL Server论坛

这样的聚合该怎么写?

jockey 发布于 2009-10-03 22:02, 770 次点击
表A字段内容:

学号,姓名,奖励
001  张三   卫生
003  王二   学习
001  张三   劳动
004  张三   才艺  (张三为两人,重名)
005  李四   卫生
001  张三   劳动


需要统计出 每个人得到奖励的总数,分别汇总

           卫生  学习 劳动 才艺
001 张三     1    0    2     0
003 王二     0    1    0     0
004 张三     0    0    0     1
005 李四     1    0    0     0
4 回复
#2
jockey2009-10-03 22:06
我只能统计出每个人单独的项目:

select 学号,姓名,count(*) as 卫生 from A  group by 学号,姓名
select 学号,姓名,count(*) as 学习 from A  group by 学号,姓名
select 学号,姓名,count(*) as 劳动 from A  group by 学号,姓名
select 学号,姓名,count(*) as 才艺 from A  group by 学号,姓名
#3
learnerboy2009-10-05 14:01
select stu_id as 学号,stu_name as 姓名,
    count(case stu_prize when '卫生' then '卫生' end) '卫生',
    count(case stu_prize when '学习' then '学习' end) '学习',
    count(case stu_prize when '劳动' then '劳动' end) '劳动',
    count(case stu_prize when '才艺' then '才艺' end) '才艺'
from t_stu
group by stu_id,stu_name
order by stu_id
go
#4
jockey2009-10-07 22:39
感谢learnerboy!

我的例子没举得好,弄不出来。

我少加了一个条件:

性别:
学号,姓名,奖励 ,性别
001  张三   卫生  男
003  王二   学习  男
001  张三   劳动  男
004  张三   才艺  女(张三为两人,重名)
005  李四   卫生  女
001  张三   劳动  男
 
 
需要统计出 每个人得到奖励的总数,分别性别汇总
 
男生       卫生  学习 劳动 才艺
001 张三     1    0    2     0
003 王二     0    1    0     0

女生       卫生  学习 劳动 才艺  
004 张三     0    0    0     1
005 李四     1    0    0     0
#5
jockey2009-10-07 22:41
case 那个地方需要两个条件:

case stu_prize and sex  when '卫生' and '男' then '卫生男' end
case stu_prize and sex  when '卫生' and '女' then '卫生女' end
1