我有一个存储过程,在其中创建一个临时表。该表有几列,其中一列只能有五个不同的值,具体取决于某些条件。
myID | ... | myValues
- - - |- - -|- - - - - - -
1 | ... | Message 1
2 | ... | Message 2
3 | ... | Message 3
4 | ... | Message 4
5 | ... | Message 5
6 | ... | Message 2
7 | ... | Message 4
现在我有另一个存储过程读取此表并返回每个消息在表上显示的次数。
SELECT myValues, COUNT(*) AS Nr
FROM #temp_table
GROUP BY myValues
Output:
myValues | Nr
- - - - - -|- - -
Message 1 | 1
Message 2 | 2
Message 3 | 1
Message 4 | 2
Message 5 | 1
问题是我什么时候没有这些消息。我的查询只会计算表格中的项目,但我希望它们的值为零。
myID | ... | myValues
- - - |- - -|- - - - - - -
1 | ... | Message 1
2 | ... | Message 3
3 | ... | Message 3
--# WANTED OUTPUT #--
myValues | Nr
- - - - - -|- - -
Message 1 | 1
Message 2 | 0
Message 3 | 2
Message 4 | 0
Message 5 | 0
我尝试使用连接,我正在考虑创建另一个表,但我不知道如何使其工作。
答案 0 :(得分:4)
假设您事先知道所有可能的值,您可以加入它们:
SELECT a.myValues, COALESCE(cnt, 0) AS Nr
FROM (SELECT 'Message 1' AS myValues UNION ALL
SELECT 'Message 2' UNION ALL
SELECT 'Message 3' UNION ALL
SELECT 'Message 4' UNION ALL
SELECT 'Message 5') a
LEFT JOIN (SELECT myValues, COUNT(*) AS cnt
FROM #temp_table
GROUP BY myValues) b ON a.myValues = b.myValues