日期:2014-05-17  浏览次数:20742 次

- - !问一条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"
------解决方案--------------------
没有好一点的方法吗。如果楼主要的是每一天的分数,那就。。。。