簡體   English   中英

ELSe(SQL Server)的嵌套CASE語句

[英]Nested CASE Statement With ELSe (SQL Server)

我有一個CASE聲明,如下所示

CASE 
       WHEN A IS NULL 
       THEN CASE
                 WHEN B IN ('C','D') THEN NULL
                 WHEN X NOT IN ('C','D') THEN Z
                 End
                 ELSE SOMETHING_ELSE -- Want to get here When 'A' IS NOT NULL
                 END AS 'Result'

當First CASE不為真時我想進入ELSE部分,即'A'不是NULL。 任何人都可以建議我是否錯誤地嵌套了它們? 沒有得到正確的結果。

非常感謝,

首先,您不需要嵌套case語句。 只使用一個案例:

select (CASE WHEN A IS NULL AND B IN ('C', 'D') THEN NULL
             WHEN A IS NULL AND X NOT IN ('C','D') THEN Z
             WHEN A IS NOT NULL THEN SOMETHING_ELSE
        END) as Result

請注意,當A IS NULL ,但前兩個條件都不滿足,則返回值將是NULL

因為case語句是按順序計算的,所以寫起來更簡單:

select (CASE WHEN A IS NOT NULL THEN SOMETHING_ELSE
             WHEN B IN ('C', 'D') THEN NULL
             WHEN X NOT IN ('C', 'D') THEN Z
        END) as Result

A不為NULL時,第一個條件捕獲。 因此,后兩個是ANULL

您可以添加第二個何時到您的情況,您可以檢查第二個條件並設置值,否則設置默認值。

CASE 
    WHEN A IS NULL THEN CASE
                          WHEN B IN ('C','D') THEN NULL
                          WHEN X NOT IN ('C','D') THEN Z
                        End
    WHEN A IS NOT NULL THEN yourdesiredvalue
    ELSE default value
    END AS 'Result'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM