2015-08-14 145 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 

你不需要所有其他人