MySQL——case when 的用法,纵向统计数据-类似数据透视表

一、查询所有单位的主办事项和协办事项数量

(1)原始数据

单位表:
在这里插入图片描述
事项分配表:
每个事项有一个主办单位和多个协办单位。
在这里插入图片描述

(2)目标数据

查询所有单位的主办事项和协办事项数量(主办:host;协办:help)
在这里插入图片描述

(3)sql语句

-- 查询所有单位的主办和协办数量
SELECT
	sxfp.sxfp_deptid 单位id,
	dept.d_name 单位名称,
	sum(case when sxfp_type='主办' then 1 else 0 end) host ,
	sum(case when sxfp_type='协办' then 1 else 0 end) help
FROM
	tb_sxfp sxfp
	JOIN tb_dept dept ON sxfp.sxfp_deptid = dept.d_id 
GROUP BY
	sxfp.sxfp_deptid;

二、查询每个督办单进度百分比,同时关联督办单表获取督办单名

(1)原始数据

督办单表:(每个督办单可以对应多个事项状态)
在这里插入图片描述
督办单-事项表:(事项状态3为已完成)
在这里插入图片描述

(2)目标数据

查询每个督办单进度百分比,同时关联督办单表获取督办单名
在这里插入图片描述

(3)sql语句

-- 查询每个督办单进度百分比,同时关联督办单表获取督办单名
select a.dbsx_id 督办单id,b.db_name 督办单名,a.rate 督办单对应事项完成进度百分比
from 
(
select tb_dbsx.dbsx_id,
TRUNCATE(sum(case when dbsx_statusid=3 then 1 else 0 end)/
count(dbsx_statusid)*100,2)
 rate
from tb_dbsx
left join tb_db
on tb_dbsx.dbsx_sxid=tb_db.db_id
group by dbsx_id
) a
left join tb_db b
on a.dbsx_id=b.db_id
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值