报表统计sql应该如何写?

一.场景

如果你遇到如下的场景,查询某个人的补贴汇总情况,我们该如何通过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函数的字段还原成原来的字段即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值