在 SQL 中组合 CASE 语句

Combining CASE Statements in SQL

我想做的是合并 (2) 个 CASE 语句,每个 return 一个 SUM,然后对这些结果求和。这是我目前所拥有的:

COUNT((
  CASE (COUNT(table.CODE))
    WHEN 0
    THEN 0
    ELSE SUM(
      CASE table.CODE
        WHEN '100'
        THEN 1
        ELSE 0
      END)) (
  CASE (COUNT(table.CODE))
    WHEN 0
    THEN 0
    ELSE (SUM(
      CASE table.CODE
        WHEN '50'
        THEN 1
        ELSE 0
      END))))
|| AS Total Code 

我想我把这个复杂化了。我收到的错误是缺少关键字(在第二个 CASE 语句的开头)。有什么想法吗?

当括号过多时,您可能会发现过度缩进有助于发现问题:

COUNT
    (
        (
            CASE (COUNT(table.CODE))
                WHEN 0
                    THEN 0
                ELSE SUM
                    (
                        CASE table.CODE
                            WHEN '100'
                                THEN 1
                            ELSE 0
                        END
                    )
             <--Should be an END here?-->
        ) <--What is happening here-->
        (
            CASE (COUNT(table.CODE))
                WHEN 0
                    THEN 0
                ELSE 
                    (
                        SUM
                            (
                                CASE table.CODE
                                    WHEN '50'
                                        THEN 1
                                    ELSE 0
                                END
                            )
                    )
             <--Should be an END here?-->
        )
    )
    || AS Total Code 

您可以看到有两个 CASE 语句相互对接,没有任何运算符可以理解它。

您可能还会发现您的第一个和第三个 CASE 没有用 END 结束,这正是 MySQL 犹豫不决的地方。

最后,MySQL 中的双杠是一个 "OR" 运算符。但是你没有做任何事情......不确定这里的计划是什么。

不过,我认为您最终会 运行 遇到在同一个查询中计算总和的问题。您可能必须将这些 SUM(CASE...END) 位移动到子查询中,然后在该子查询之外执行 COUNT

查看我的问题的答案后,我得出以下结论:

CASE (COUNT(table.CODE))
    WHEN 0
    THEN 0
    ELSE ((SUM(
      CASE table.CODE
        WHEN '100' 
        THEN 1
        WHEN '50'
        THEN 1
        ELSE 0
      END))
  END) AS Value5

我正在清理旧代码,所以我没有完全理解我在看什么,因为它到处都是。这更干净了,我很肯定我现在得到了期望的响应。