SQL中CASE语句的组合

SQL中CASE语句的组合,sql,case,Sql,Case,我要做的是组合(2)个CASE语句,每个CASE语句返回一个和,然后取这些结果的和。以下是我目前掌握的情况: 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

我要做的是组合(2)个CASE语句,每个CASE语句返回一个和,然后取这些结果的和。以下是我目前掌握的情况:

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 
计数
(
(
案例(计数(表代码))
当0
然后0
其他金额
(
CASE table.CODE
当‘100’
那么1
其他0
结束
)
) 
(
案例(计数(表代码))
当0
然后0
其他的
(
总和
(
CASE table.CODE
50岁时
那么1
其他0
结束
)
)
)
)
||作为总代码
您可以看到,有两个CASE语句相互冲突,没有操作符来理解它们

您还可能发现您的第一个和第三个
案例
没有以
结尾
结束,这正是MySQL所回避的

最后,MySQL中的双栏是一个“OR”操作符。但你什么都没做。。。不知道这里有什么计划


但最终,我认为在同一个查询中计算一个和会遇到问题。您可能必须将这些
总和(CASE…END)
位移动到子查询中,然后在子查询之外进行
计数。

当您有过多的括号时,您可能会发现使用缩进来发现问题很有帮助:

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 
计数
(
(
案例(计数(表代码))
当0
然后0
其他金额
(
CASE table.CODE
当‘100’
那么1
其他0
结束
)
) 
(
案例(计数(表代码))
当0
然后0
其他的
(
总和
(
CASE table.CODE
50岁时
那么1
其他0
结束
)
)
)
)
||作为总代码
您可以看到,有两个CASE语句相互冲突,没有操作符来理解它们

您还可能发现您的第一个和第三个
案例
没有以
结尾
结束,这正是MySQL所回避的

最后,MySQL中的双栏是一个“OR”操作符。但你什么都没做。。。不知道这里有什么计划


但最终,我认为在同一个查询中计算一个和会遇到问题。您可能必须将这些
总和(CASE…END)
位移动到子查询中,然后在子查询之外进行
计数。

当您有过多的括号时,您可能会发现使用缩进来发现问题很有帮助:

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 
计数
(
(
案例(计数(表代码))
当0
然后0
其他金额
(
CASE table.CODE
当‘100’
那么1
其他0
结束
)
) 
(
案例(计数(表代码))
当0
然后0
其他的
(
总和
(
CASE table.CODE
50岁时
那么1
其他0
结束
)
)
)
)
||作为总代码
您可以看到,有两个CASE语句相互冲突,没有操作符来理解它们

您还可能发现您的第一个和第三个
案例
没有以
结尾
结束,这正是MySQL所回避的

最后,MySQL中的双栏是一个“OR”操作符。但你什么都没做。。。不知道这里有什么计划


但最终,我认为在同一个查询中计算一个和会遇到问题。您可能必须将这些
总和(CASE…END)
位移动到子查询中,然后在子查询之外进行
计数。

当您有过多的括号时,您可能会发现使用缩进来发现问题很有帮助:

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 
计数
(
(
案例(计数(表代码))
当0
然后0
其他金额
(
CASE table.CODE
当‘100’
那么1
其他0
结束
)
) 
(
案例(计数(表代码))
当0