一.场景
如果你遇到如下的场景,查询某个人的补贴汇总情况,我们该如何通过sql完成任务呢?
二.思路
思路1:
将总计行最后通过union all 拼接起来
思路2:
使用数据库自带的函数with rollup,思路二也是别人提供的
三.具体解决方法
思路1具体方法
在此不写具体的字段和表名,参考着可以将汉字补充为自己的字段或者表名
select * from (( select 身份证,服务类型,服务项目,单次补贴(公司),累积补贴(公司),单次补贴(其他),累积补贴(其他) from 统计表 ) union all (select 身份证,'' 服务类型, '总计' 服务项目,'/' 单次补贴(公司),sum(累积补贴) 累积补贴(公司),'/' 单次补贴(其他), sum(累积补贴) 累积补贴(其他) from 统计表 group by fd_card) ) t3 order by t3.服务类型,t3.服务项目
思路2具体方法
select * from (select 身份证,服务类型,服务项目,ifnull(服务类型,'总计') 服务项目,ifnull(服务类型,'/') 单次补贴(公司),sum(累积补贴(公司)) 累积补贴(公司),ifnull(服务类型,'/') 单次补贴(其他),累积补贴(其他),sum(累积补贴) 累积补贴 from 统计表 group by 身份证,服务类型 WITH ROLLUP order by 身份证,服务类型,服务项目) t3
针对思路2注意:ifnull(服务类型,‘总计’),ifnull函数的具体字段可以看自己查询的语句的具体为空的字段是哪个字段,可自行替换。查看为空的sql就不再写了,将使用ifnull函数的字段还原成原来的字段即可。