[英]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.