【问题标题】:Counting null values in a temporary table计算临时表中的空值
【发布时间】:2023-03-26 02:15:01
【问题描述】:

我有一个存储过程,它在其中创建了一个临时表。此表有几列,其中一列只能有五个不同的值,具体取决于某些条件。

 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

我尝试使用连接,并且正在考虑创建另一个表,但我不知道如何使其工作。

【问题讨论】:

    标签: sql sql-server select stored-procedures count


    【解决方案1】:

    假设您预先知道所有可能的值,您可以加入它们:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2018-11-03
      相关资源
      最近更新 更多