2015-08-14 186 views
0

我試圖壓扁單元狀態。我的病例陳述有什麼問題?我是SQL新手。嵌套SQL案例語句

CASE WHEN [sStatus] LIKE '%Notice%' 
       THEN 'Notice' 
      ELSE 
       CASE WHEN [sStatus] LIKE '%Occupied%' 
         THEN 'Occupied' 
        ELSE 
         CASE WHEN [sStatus] LIKE '%Vacant%' 
           THEN 'Vacant' 
          ELSE [sStatus] 
     END as [Status] 

enter image description here

謝謝!

+0

錯誤是:關鍵字'as'附近的語法不正確。 – Walker

回答

2

您的案例陳述缺失結束。但是,他們並不需要被嵌套在首位:

(CASE WHEN [sStatus] LIKE '%Notice%' THEN 'Notice' 
     WHEN [sStatus] LIKE '%Occupied%' THEN 'Occupied' 
     WHEN [sStatus] LIKE '%Vacant%' THEN 'Vacant' 
     ELSE [sStatus] 
END) as [Status] 

而且,如果你只是想第一個字,你不需要case都:

SUBSTRING(sStatus, CHARINDEX(' ', sStatus + ' '), LEN(sStatus)) 
+0

不知道我可以使用多次這樣的!謝謝! – Walker

+0

使用子字符串會更有效嗎? – Walker

+0

@Walker。 。 。它可能會稍微更有效率。我認爲'substring()'在開始時比通配符'like'更快。 –

1

由於您有3個CASE語句並且只有一個END,因此您會收到錯誤。

但是,根本不需要嵌套這些CASE語句。您可以簡單地執行此操作:

CASE 
    WHEN [sStatus] LIKE '%Notice%' 
       THEN 'Notice' 
    WHEN [sStatus] LIKE '%Occupied%' 
       THEN 'Occupied' 
    WHEN [sStatus] LIKE '%Vacant%' 
       THEN 'Vacant' 
    ELSE [sStatus]  
END as [Status] 
1
CASE WHEN [sStatus] LIKE '%Notice%' THEN 'Notice' 
    WHEN [sStatus] LIKE '%Occupied%' THEN 'Occupied' 
    WHEN [sStatus] LIKE '%Vacant%' THEN 'Vacant' 
    ELSE [sStatus] END as Status 

你不需要所有其他人