在SQL中组合CASE语句

时间:2015-09-21 18:50:21

标签: sql case

我要做的是组合(2)每个返回SUM的CASE语句,然后取这些结果的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 

我认为我过于复杂了。我收到的错误是Missing Keyword(在第二个CASE语句的开头)。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

当你有一个括号的重载时,你可能会发现过度使用缩进来发现问题是有帮助的:

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中的双栏是&#34; OR&#34;运营商。但你不是或任何东西......不确定这里的计划是什么。

但最终,我认为你会遇到问题在同一个查询中计算一个Sum。您可能必须将这些SUM(CASE...END)位移动到子查询中,然后在其外部执行COUNT

答案 1 :(得分:0)

在查看我的问题的答案之后,这就是我想出的:

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

我正在清理旧代码,所以我并不完全理解我在看什么,因为它到处都是。这是一个更清洁,我很肯定我现在得到了理想的回应。