在SQL Case语句中正确使用嵌套的Case语句

时间:2011-03-22 19:11:09

标签: sql sql-server sql-server-2008

下午好,

我目前正在处理一些postgresql代码并将其转换为sql(大多数情况下它非常简单)但是我遇到了一个带有数组的case语句,并且无法找出正确的语法,因为我已经从来没有见过以这种方式使用的案例陈述。

我已经快速举例说明我正在尝试做什么,但它仍然会引发语法错误:

Select field3, field 4, 
Case 
    When field in (1, 3, 7) then 1
    When field in (2, 4, 6) then 2
    When field in (5, 9) then 3
    When field is null or ' ' then 4
Else
Case
    When field2 = x then 1
    When field2 = y then 2
Else End
End as fieldname

这是原始代码,所以你可以看到我正在编辑的内容。案例陈述是(据我之前提到的,我从未使用过这种方式的案例),使用2个字段来获得所需的结果。请注意我最初没有写这个,只是将它从postgresql移植到t-sql。

CASE 
    WHEN rank IN (1,7,9) THEN  '1'
    WHEN rank IN (2,5,10) THEN '2' 
    WHEN rank IN (3,6) THEN '3'
    WHEN rank IN (4,8) THEN '4'
    WHEN tier IS NULL OR tier = '' THEN 'N/A' ELSE 
CASE WHEN tier = 'HE' THEN '3'
    WHEN tier = 'ME' THEN '2'
    WHEN tier = 'LE' THEN '1' END
END AS tier

在下面的答案中工作(其中一个是我的错字)我现在在“Else End”子句上遇到语法错误。

我修改了问题,说明它是关于嵌套的case语句而不是数组的问题 感谢

3 个答案:

答案 0 :(得分:7)

Case
  When field in (1, 3, 7) then 1
  When field in (2, 4, 6) then 2
  When field in (5, 9) then 3
  When field is null or ' ' then Case
    When field2 = x then 1
    When field2 = y then 2
  End --inner case
  Else null
End as fieldname 

  

我在这个例子中滥用了“数组”一词吗?

答案 1 :(得分:2)

  1. 你错过了When field is null or ' '案例。
  2. 上述情况应写为When field is null or field = ' '
  3. 您在ELSE中错过了内部CASE语句的END。

答案 2 :(得分:1)

ELSE条款看起来多余:

CASE 
   WHEN field IN (1, 3, 7) THEN 1
   WHEN field IN (2, 4, 6) THEN 2
   WHEN field IN (5, 9) THEN 3
   WHEN field IS NULL THEN 4
   WHEN field2 = x THEN 1
   WHEN field2 = y THEN 2
END AS fieldname
相关问题