sql - 按名称查询报表的 SQL 查询,其中许多列按状态计数
问题描述
是否可以通过 sql 查询按状态计数的名称生成报告组。
表:
- 项目(id、名称、status_id、service_id)
- 状态(id,名称)
- 服务(ID,名称)
我需要做一个报告,按状态组按服务计数:
列结果:服务名称、状态名称 1、状态名称 2、状态名称 3、总计
行结果:
service name 1, 30, 10, 20, 60
service name 2, 10, 5, 40, 55
service name 3, 0, 2, 8, 10
解决方案
您似乎想要连接和条件聚合:
select se.name as service_name,
sum(case when st.name = 'status 1' then 1 else 0 end) as cnt_status_1,
sum(case when st.name = 'status 2' then 1 else 0 end) as cnt_status_2,
sum(case when st.name = 'status 3' then 1 else 0 end) as cnt_status_3,
count(*) as total
from project p
inner join status st on st.id = p.status_id
inner join service se on se.id = p.service_id
group by se.id, se.name
推荐阅读
- node.js - 无法连接到 Graphql 订阅?
- twitter-bootstrap - 单击后如何在引导程序 5 中隐藏导航栏
- python - 如何使 tkinter 按钮替换 while 循环上的输入提示?
- javascript - 如何使用 :hover 更改使用 javascript 创建的元素属性?
- excel - Excel VBA 使用 MS Access DB 我应该关闭连接吗?
- python - pyopengl黑屏不绘图
- cassandra - Cassandra - 我要写这么多吗?
- reactjs - 将道具从 A 映射到 B 组件时出错未定义不是对象(评估 'item.cate.map)
- javascript - Extjs 默认类属性
- java - NoUniqueBeanDefinitionException:不控制 Bean 创建类