在 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
我正在清理旧代码,所以我没有完全理解我在看什么,因为它到处都是。这更干净了,我很肯定我现在得到了期望的响应。
我想做的是合并 (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
我正在清理旧代码,所以我没有完全理解我在看什么,因为它到处都是。这更干净了,我很肯定我现在得到了期望的响应。