簡體   English   中英

IIF到案例聲明

[英]IIF to Case statement

我在要遷移到SQL Server的Access中有以下代碼,

 IIf([code] Is Not Null,IIf([code]<>'ABC',

 IIf([length] Is Null,1,IIf([Length]=0,1,

 IIf([width] Is Null,1,IIf([Width]=0,1,

 IIf([height] Is Null,1,IIf([Height]=0,1,

 0))))))))

我相信它會檢查代碼是否不為null且不等於“ ABC”,然后長度應為null或0,然后為其指定條件失敗的值1,然后為0。我需要一些幫助來編寫帶有大小寫的條件。

JET SQL中的IIf轉換為SQL Server中的CASE WHEN ,如下所示:

IIf(condition, whenTrue, whenFalse)

直接翻譯成

CASE WHEN condition THEN whenTrue ELSE whenFalse END

對於嵌套表達式

IIf(condition1, whenTrue1, IIf(condition2, whenTrue2, whenFalse))

您可以直接翻譯它們:

CASE WHEN condition1 
     THEN whenTrue1 
     ELSE CASE WHEN condition2
               THEN whenTrue2
               ELSE whenFalse
          END
END

或使用CASE允許您指定多個WHEN條件的事實:

CASE WHEN condition1 THEN whenTrue1 
     WHEN condition2 THEN whenTrue2
     ELSE whenFalse
END

有了這些知識,翻譯您的陳述應該很容易,並且留給讀者練習(我不想破壞樂趣)。

文字翻譯:

CASE WHEN [code] Is Not Null
THEN 
    CASE WHEN [code]<>'ABC'
    THEN
        CASE WHEN [length] Is Null 
        THEN 1
        ELSE 
            CASE WHEN [Length]=0
            THEN 1
            ELSE
                CASE WHEN [width] Is Null
                THEN 1 
                ELSE 
                    CASE WHEN [Width]=0
                    THEN 1
                    ELSE
                        CASE WHEN [height] Is Null
                        THEN 1
                        ELSE
                            CASE WHEN [Height]=0
                            THEN 1
                            ELSE 0
                            END
                        END
                    END
                END
            END
        END
    END
END

簡化為:

CASE WHEN ISNULL([code], 'ABC') <>'ABC' AND
    (ISNULL([length], 0) = 0 OR
     ISNULL([width], 0) = 0 OR
     ISNULL([height], 0) = 0)
THEN 1
ELSE 0
END

暫無
暫無

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

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