2013-04-10 59 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