如何在多个WHEN
个案例中使用相同的THEN
子句,例如:
CASE WHEN COUNT(t2.test)=2 THEN t2.costs/2 ELSE t2.costs END costs,
CASE WHEN COUNT(t2.test)=2 THEN t2.CIR/2 ELSE t2.CIR END CIR,
CASE WHEN COUNT(t2.test)=2 THEN t2.CPV/2 ELSE t2.CPV END CPV
是否可以有一个WHEN
子句,因为在所有情况下它都是相同的?
答案 0 :(得分:1)
您的代码:
CASE WHEN COUNT(t2.test)=2 THEN t2.costs/2 ELSE t2.costs END costs,
CASE WHEN COUNT(t2.test)=2 THEN t2.CIR/2 ELSE t2.CIR END CIR,
CASE WHEN COUNT(t2.test)=2 THEN t2.CPV/2 ELSE t2.CPV END CPV
所有case语句表达式似乎都会生成新的列值,因此不能在单个case-when
子句下使用。
根据文档,对于每个表达式的值,您必须使用when
子句。
CASE COUNT(t2.test)
WHEN 2 THEN t2.costs/2
WHEN 3 THEN some_other_expression_here
ELSE t2.costs
END costs,
CASE COUNT(t2.test)
WHEN 2 THEN t2.CIR/2
WHEN 3 THEN another_expression_here
ELSE t2.CIR
END CIR,
CASE another_case_expression
WHEN ...
ELSE ...
END as value_alias_name
您不能只在一个地方检查一个when
并在多个列表达式中使用它。
请参阅:
答案 1 :(得分:0)
这是一个按顺序评估几个表中非空(现有id)的示例,它与LEFT OUTERs一起使用。具有匹配行的第一个表分配查询行的“阶段”。
CASE COALESCE(a.id, p.id, f.id, g.id, c.id)
WHEN a.id THEN 'Arb'
WHEN p.id THEN '3'
WHEN f.id THEN '2'
WHEN g.id THEN '1'
WHEN c.id THEN '0'
ELSE '0'
END as phase