[英]Nested case statement sql
我在SQL中編寫case語句時遇到問題。 我的第一個問題是:是否可以在select語句中的SQL查詢中將if語句編寫為case語句?
如果不是,請查看下面的案例陳述,並幫助/指導我進入有效格式。 謝謝,非常感謝!
IF (var1 = 1){
do this1;
IF (var 1 = 2){
Do this2;
}Else{
do something else1;
}
Else if (Var 1 = 3){
Do this3;
}Else{
Do something else2;
}
這是我的案例陳述。 我知道它不起作用,因為它不是一個有效的案例陳述。 有人可以幫我做一個有效的案例陳述。 提前致謝。
SELECT
CASE
WHEN apple.type = 1 OR apple.type = 2
THEN basket.S1
ELSE
CASE
WHEN apple.type = 0 AND basket.S2 is null
THEN basket.S1
ELSE basket.S2
ELSE
CASE
WHEN apple.type = 3 and basket.s3 is null
THEN basket.S1
ELSE basket.S3
END
END
END
FROM .....
WHERE .....
我認為你的案例陳述過於復雜,看你的第一個例子你的案例陳述應該相當簡單,
就像是 ....
SELECT CASE
WHEN @Var1 = 1 THEN 'Something 1'
WHEN @Var1 = 2 THEN 'Something 2'
WHEN @Var1 = 3 THEN 'Something 3'
ELSE 'Something Else'
END
FROM .....
WHERE .....
你的案例陳述我們可以寫這樣的東西......
SELECT
CASE
WHEN apple.[type] IN (1,2)
THEN basket.S1
WHEN apple.type = 0 AND basket.S2 is null
THEN basket.S1
WHEN apple.type = 3 and basket.s3 is null
THEN basket.S1
ELSE basket.S3
END
由於您正在檢查空值並替換非空值,因此可以使用COALESCE
函數縮短查詢時間。
SELECT
CASE
WHEN apple.type IN (1, 2) THEN basket.s1
WHEN apple.type = 0 THEN COALESCE(basket.s2, basket.s1)
WHEN apple.type = 3 THEN COALESCE(basket.s3, basket.s1)
END
FROM ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.