grouping 函数在这里没看懂。。

 select case grouping(substr(hjszcqmc,1,2)) when 1 then '合计' else substr(hjszcqmc,1,2) end cqmc,
count(*)hj,
sum(case when jtrs=1 or jtrs=0  then 1 else 0 end)jtrs1,--家庭人数为0人的按一人算,看看字段有无空的情况
sum(case when jtrs=2  then 1 else 0 end)jtrs2,
sum(case when jtrs=3  then 1 else 0 end)jtrs3,
sum(case when jtrs>=4 then 1 else 0 end)jtrs4
from tpg_gzflhh where lhhzt=2
group by  rollup(substr(hjszcqmc,1,2)) 

图片说明

grouping判断如果是空就是返回1,是这样没错吧?
然后这里的else就是非1,就是返回0的意思吧,返回0是判断内容不为空。
我理解就是判断为空的行就打上’合计‘,不为空的就用原来的区名,但是为什么整个跑完后,变成每一列都加上一个一个判断,只要有区名字的都加1进去的COUNT效果了?

思路转不过来。。求指教。。。

就是个判断,不过grouping做了什么,要看他具体实现,然后根据得到的值,用case when语法去获取不同的值

group by rollup(),只传递字段进去究竟是什么意思?百度出来的都是两个。