2013-04-10 43 views
1

简单CASE表达式的语法位于Microsoft文档中,如下所示;SQL Server案例输入表达式

CASE input_expression 
    WHEN when_expression THEN result_expression [ ...n ] 
    [ ELSE else_result_expression ] 
END 

是否有可能做不改写为input_expression第二次查询的以下?

CASE input_expression 
    WHEN when_expression THEN result_expression [ ...n ] 
    [ ELSE **input_expression** ] 
END 

谢谢!

+0

肯定。 '当1,然后2另外一个结束'将会起作用 – cha 2013-04-10 06:46:03

+0

您可以使用布尔变量来存储input_expression的结果。 – 2013-04-10 06:50:26

回答

3

如果input_expression不能NULL只有一个WHEN分支,那么你可以写:

COALESCE(NULLIF(input_expression,when_expression),result_expression) 

否则,如果的input_expression复杂太多,请考虑将它的计算移入子查询中。因此,而不是:

SELECT 
CASE input_expression 
    WHEN when_expression THEN result_expression [ ...n ] 
    ELSE input_expression 
END, 
--Other columns 
FROM 
    --Rest of query 

你必须:

SELECT 
CASE ie 
    WHEN when_expression THEN result_expression [ ...n ] 
    ELSE ie 
END, 
--Other columns 
FROM 
    (
    SELECT 
     input_expression as ie, 
     --Other columns 
    FROM 
     --Rest of query 
    ) t 
+0

它不完美,但我认为subquiery将工作正常。感谢您的帮助,Damien。 – Eds 2013-04-10 10:23:14