SQL中CASE语句的组合
我要做的是组合(2)个CASE语句,每个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
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