sql - 如果计数为 0 或未找到行,则返回每个 Select Case 选项的结果
问题描述
TSQL 2008r2。我希望这个查询总是返回三行。SELECT CASE 中指定的每个项目一个:
SELECT CASE result
WHEN 'A' then 'Group A'
WHEN 'B' then 'Group B'
WHEN 'C' then 'Group C'
end as resultType, count(Result) as numberOfResults from masterGroups
where theYear=2016 and postCode=3579 group by result;
ATM它正确地返回这个:
Group A 1
Group C 8
无论它在 masterGroups 中找到什么,我都希望它始终返回三行。如果找不到这三个项目之一,我希望它返回 0。所以在上述情况下,它应该返回:
Group A 1
Group B 8
Group C 0
提前致谢
解决方案
你真正想要的是一个包含所有结果类型的表。如果没有这个,我们可能会为此目的使用动态 CTE:
WITH results AS (
SELECT 'A' AS result UNION ALL
SELECT 'B' UNION ALL
SELECT 'C'
)
SELECT
CASE r.result
WHEN 'A' THEN 'Group A'
WHEN 'B' THEN 'Group B'
WHEN 'C' THEN 'Group C'
END AS resultType,
COUNT(m.result) AS numberOfResults
FROM results r
LEFT JOIN masterGroups m
ON r.result = m.result AND m.theYear = 2016 AND m.postCode = 3579
GROUP BY
r.result;
注意:将当前WHERE
子句中的逻辑移动到ON
左连接的条件。
推荐阅读
- node.js - NODE JS 项目演示
- server - 如何在一台带 GPU 的笔记本上运行多个服务器?
- php - 为什么相同的 SQL 查询会因用户角色的不同而不同?
- javascript - 材质 UI 中持久抽屉的路由
- vsto - 锁处RibonLabel尺寸
- pine-script - 如何仅显示“绘图”值(在标题处)而不是图表上的绘图?
- android - 模拟器:无法添加库 vulkan-1.dll:失败
- javascript - 在 HTML 表中添加一个可内容编辑的新行并保存
- wordpress - 在 WooCommerce 中向订单编辑页面显示自定义字段 product2id salesforce
- sulu - 来自自定义模板的文章中的附加字段