MSSQL查询需求:统计关联表Checklist_top与Checklist_body的指定指标
MSSQL查询:按Facility统计总记录数与Answer=1的数量
嘿,这就给你搞定!针对你的需求,我写了对应的MSSQL查询语句,能精准关联两张表并按Facility分组统计你要的指标:
SELECT ct.Facility, COUNT(*) AS TOTAL, SUM(IIF(cb.Answer = 1, 1, 0)) AS COUNT_1 FROM Checklist_top ct INNER JOIN Checklist_body cb ON ct.ID = cb.IDcheckTop GROUP BY ct.Facility ORDER BY ct.Facility;
快速解释下代码逻辑:
- 使用
INNER JOIN关联Checklist_top(别名ct)和Checklist_body(别名cb),关联条件是ct.ID = cb.IDcheckTop,只保留有对应明细记录的Facility COUNT(*):统计每个Facility对应的所有Checklist_body明细条数,即TOTALSUM(IIF(cb.Answer = 1, 1, 0)):利用MSSQL的IIF函数标记Answer为1的记录,求和后得到COUNT_1;也可以用标准SQL的CASE WHEN写法:SUM(CASE WHEN cb.Answer = 1 THEN 1 ELSE 0 END)GROUP BY ct.Facility:按Facility字段分组,实现按每个Facility聚合统计ORDER BY ct.Facility:可选排序,让结果按Facility名称有序展示
基于你的样本数据,运行后会得到这样的结果:
| Facility | TOTAL | COUNT_1 |
|---|---|---|
| Item1 | 4 | 1 |
| Item2 | 2 | 1 |
| Item3 | 2 | 0 |
| Item4 | 2 | 2 |
| Item5 | 2 | 1 |
| Item6 | 2 | 1 |
(注:样本里Item1对应了两个Top记录(ID1和ID7),所以明细总共有4条,其中Answer=1的只有1条,完全符合数据逻辑)
内容的提问来源于stack exchange,提问作者Timur
相关产品推荐
相关产品推荐

