【问题标题】:SQL - "Case when" vs conditionSQL - “案例”与条件
【发布时间】:2021-09-29 09:29:06
【问题描述】:

我有一个表Table_A,其中包含 A、B 和 C 列,其中 C 列需要求和,但前提是 B 列是某个值。否则,C 列可能并不总是包含要求和的值。

所以正常的SQL:

SELECT A, B, SUM(C) 
FROM Table_A 
WHERE B = 'value condition'
GROUP BY A,B

效果很好。但是,我认为我可以使用“CASE WHEN”来捕捉零条件,例如:

SELECT 
    A, B, 
    CASE WHEN B = 'value condition' THEN SUM(C) ELSE 0 END 
FROM Table_A  
GROUP BY A, B

我收到一个错误,指的是它仍在尝试SUM 一个不在条件中的值。我错过了什么吗?还是我误解了CASE WHEN

【问题讨论】:

  • 提示:SUM(CASE WHEN B = 'value condition' THEN C ELSE 0 END)
  • SUM 应该在 整个 CASE 表达式周围。
  • 您的示例运行良好,您没有向我们展示实际查询或实际错误。演示:dbfiddle.uk/…
  • 张贴您遇到的任何错误消息的完整内容(全部 - 代码、级别等)以供将来参考。

标签: sql sql-server case


【解决方案1】:

您需要条件聚合。 CASE 表达式应该出现在 SUM 中:

SELECT A, SUM(CASE WHEN B = 'value condition' THEN C ELSE 0 END) AS total
FROM Table_A
GROUP BY A;

请注意,B 可能不属于 GROUP BY 子句,因为您希望使用其值有条件地进行聚合。

【讨论】:

  • 由于 OP 在GROUP BY 中有B,因此他们的查询应该运行,并给出与此答案完全相同的结果(在编辑之前)。演示:dbfiddle.uk/…
  • @Bailey 感谢您的反馈,已更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多