Return 当没有要求和的值时总和为 0 - sql 服务器

Return 0 in sum when no values to sum - sql server

尝试 return 0 如果这些列中的任何一个都没有值 returned,在我的特定情况下 'Past Due' 没有总值,所以它是 returned,所以我在此处的第二个片段中得到了 return。如果这些都没有价值,我怎么能 return 呢?

SELECT ClientDeliveryStatus,
    SUM(CASE 
        WHEN ClientDeliveryStatus = 'Past Due' THEN 1 
        WHEN ClientDeliveryStatus = 'Due Tomorrow' THEN 1 
        WHEN ClientDeliveryStatus = 'Due Today' THEN 1 
        WHEN ClientDeliveryStatus = 'Due Beyond' THEN 1
        ELSE 0 END) AS Total
FROM Table1
GROUP BY ClientDeliveryStatus

当前结果:

    ClientDeliveryStatus    Total
    Due Beyond              1
    Due Today               3
    Due Tomorrow            51

期望的结果:

    ClientDeliveryStatus    Total
    Due Beyond              1
    Due Today               3
    Due Tomorrow            51
    Past Due                0

示例数据:

表 1:

ClientDeliveryStatus
Due Tomorrow
Due Tomorrow
Due Tomorrow
Due Beyond  
Due Beyond  
Due Tomorrow
Due Beyond
Due Beyond
Due Beyond
Due Today
Due Today

CREATE TABLE1 Table1 (ClientDeliveryStatus VARCHAR(MAX))
INSERT INTO Table1 Values ('Due Tomorrow'), ('Due Tomorrow'), ('Due Tomorrow'), ('Due Beyond'), ('Due Beyond'), ('Due Beyond'), ('Due Beyond'), ('Due Today'),('Due Today')

您需要 table 所有状态。如果您还没有 table,您可以在查询本身中执行此操作:

SELECT ClientDeliveryStatus, COUNT(t.ClientDeliveryStatus) AS Total
FROM (SELECT 'Past Due' as cds UNION ALL
      SELECT 'Due Tomorrow' UNION ALL
      SELECT 'Due Today' UNION ALL
      SELECT 'Due Beyond'
     ) s LEFT JOIN
     Table t
     ON s.cds = t.ClientDeliveryStatus
GROUP BY s.cds;

您的原始查询不正确,因为它缺少 GROUP BY 并且由于 SUM() 中的 CASE 而过于复杂。