一个有关报表统计的oracle统计语句
其他
2018-06-05 11:54:30
阅读次数: 0
下面是分享的sql,sql并不是本人亲自写出来而是请别人帮忙编码,事后问起他为什么会写这么复杂的sql
给我的回答是:多写一点就会了,期待oracle的高级查询方面有所增强
decode的用法来自:http://blog.csdn.net/u010924897/article/details/47066937
小计的算法来自:http://blog.csdn.net/lqh4188/article/details/7597117
select dwmc,case when zymc is null then '系部各年级人数合计' else zymc end yname
,sum("2014") njone, sum("2015")njtwo, sum("2016")njthree,sum("2017")njfire,sum(allNum) allNum
from(
select dwmc,zymc,zydm
,(case when min(decode(xznj,'2014',yxnum,null)) is null then 0 else min(decode(xznj,'2014',yxnum,null)) end) as "2014"
,(case when min(decode(xznj,'2015',yxnum,null)) is null then 0 else min(decode(xznj,'2015',yxnum,null)) end) as "2015"
,(case when min(decode(xznj,'2016',yxnum,null)) is null then 0 else min(decode(xznj,'2016',yxnum,null)) end)as "2016"
,(case when min(decode(xznj,'2017',yxnum,null)) is null then 0 else min(decode(xznj,'2017',yxnum,null)) end)as "2017"
,sum(yxnum) as allNum
FROM (select dw.mc dwmc,t.xznj,z.zydm,z.zymc,
sum(case sfzx when '1' then 1 else 0 end) yxnum
from T_BZKS t, T_BZKS_ZY z,t_dw dw
where t.sfzx = '1' and z.zydm = t.zydm
and z.szyxdm = dw.dm and t.sfzx is not null
and to_number(t.xznj) >= '2014'
group by z.zydm, z.zymc,t.xznj,dw.mc
order by t.xznj asc
) GROUP BY zymc,zydm,dwmc
)
group by grouping sets ((dwmc, zymc), dwmc);
转载自blog.csdn.net/qq_36174184/article/details/78843657