带有多个`then`子句的单个`when`子句

时间:2014-03-20 17:32:56

标签: php mysql sql case-when

如何在多个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子句,因为在所有情况下它都是相同的?

2 个答案:

答案 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. MySQL: CASE Syntax
  2. MySQL: CASE Operator

答案 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