当返回的所有列的总和为 0 时,如何在 table 中的所有列中显示 0?

How to display 0 in all the columns in a table when sum returned for all the columns is 0?

目前我得到的是空白列,但我想要 0 Here,如图所示。 Click here for the Image。下面是我的查询,当返回的总和为 0 时,我希望所有列都显示 0。

SELECT COUNT(*) AS Inserted,
SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) AS Pending,
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS Completed,
SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) AS Failure 
FROM [dbo].[ETIME_TIMECARD]
where cast(CreateDateTime as date) = CAST(GETDATE() AS DATE)
Group By cast(CreateDateTime as date) 

您没有得到任何结果,因为您的 WHERE 没有 return 任何结果,并且您的 GROUP BY 没有任何可分组的依据。实际上,似乎不需要 GROUP BY

SELECT COUNT(*) AS Inserted,
       ISNULL(SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END),0) AS Pending,
       ISNULL(SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END),0) AS Completed,
       ISNULL(SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END),0) AS Failure 
FROM [dbo].[ETIME_TIMECARD]
WHERE CreateDateTime >= CAST(GETDATE() AS date)
  AND CreateDateTime < CAST(DATEADD(DAY, 1, GETDATE()) AS date);

不过,就我个人而言,我会切换到 COUNT,因为你显然在数,然后你就不需要 ISNULL,因为 COUNT 不会 return NULL:

SELECT COUNT(*) AS Inserted,
       COUNT(CASE status WHEN 0 THEN 1 END) AS Pending,
       COUNT(CASE status WHEN 1 THEN 1 END) AS Completed,
       COUNT(CASE status WHEN 2 THEN 1 END) AS Failure 
FROM [dbo].[ETIME_TIMECARD]
WHERE CreateDateTime >= CAST(GETDATE() AS date)
  AND CreateDateTime < CAST(DATEADD(DAY, 1, GETDATE()) AS date);