繁体   English   中英

在SQL中组合CASE语句

[英]Combining CASE Statements in SQL

我正在尝试做的是合并(2)CASE语句,每个语句返回一个SUM,然后取这些结果的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中的双杠是“或”运算符。 但是您什么也没做……不知道这里的计划是什么。

不过,最终,我认为您将在计算同一查询中的总和时遇到问题。 您可能必须将那些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

我正在清理旧代码,所以我不完全明白自己在看什么,因为它遍地都是。 这非常干净,我很肯定自己现在正在获得期望的响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM