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
而过于复杂。
尝试 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
而过于复杂。