我要做的是组合(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语句的开头)。有什么想法吗?
答案 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
我正在清理旧代码,所以我并不完全理解我在看什么,因为它到处都是。这是一个更清洁,我很肯定我现在得到了理想的回应。