2015-07-03 209 views
4

我在寫SQL語句時遇到問題。我的第一個問題是:是否可以在select語句內的SQL查詢中將下面的if語句作爲case語句寫入?嵌套case語句sql

如果不是,那麼請查看下面的案例聲明,並幫助/指導我進入有效格式。非常感謝,非常感謝!

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 ..... 

回答

2

既然你正在檢查nulls和substit如果使用非空值,則可以使用COALESCE function使查詢更短。

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 ... 
+0

謝謝!這工作就像一個魅力! –

3

我認爲你是在你的case語句複雜,看着你的第一個例子中,你case語句應該是相當簡單的,

像....

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 ..... 

你的case語句我們可以寫這樣的東西嗎...

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 
+0

非常感謝!這也有一點調整。 –