- - !问一条SQL语句(具体见内容)
可能有很多人问过这个问题,但我还是没找到合适的答案,这样就请大家帮帮忙想想办法了
为求统一,大家用的表名和字段名,请用中文,并与我一致,谢谢!
DataBase Table Name : 扣分表
扣分日期 姓名 所扣分数
-------------------------------------------------
2008-01-02 张三 2
2008-01-10 张三 1
2008-01-02 李四 2
2008-02-10 张三 1
要求反回结果:
姓名 1月 2月 ....12月
--------------------------------------------------
张三 3 2
李四 2
最好是一条SQL语句,
其次考虑存储过程。
------解决方案--------------------
select sum(case when extract(month from 扣分日期) = '01' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '02' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '03' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '04' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '05' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '06' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '07' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '08' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '09' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '10' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '11' then 所扣分数 else 0 end) ,
sum(case when extract(month from 扣分日期) = '12' then 所扣分数 else 0 end) from 扣分表 group by 姓名
------解决方案--------------------CASE WHEN TO_CHAR(扣分日期,'MM') = '01' THEN 所扣分数 ELSE 0 END
也可以
------解决方案--------------------用decode也行
decode(TO_CHAR(扣分日期,'MM'), '01',1,0 )
别名想要数字开头需要加"",比如"01"
------解决方案--------------------没有好一点的方法吗。如果楼主要的是每一天的分数,那就。。。。