CAST(当Id为IN时的情况(从RefTable中选择RefId,其中RefId = someId)那么0 ELSE 1结束AS位

时间:2013-01-22 14:14:55

标签: sql stored-procedures

嗨我的手术有问题

存储过程:

SELECT dbo.Table1.*,
       CAST (CASE WHEN Table1.Id IS IN ( SELECT Id 
                                         FROM dbo.Table2 
                                         WHERE RefRolleId =@Id) 
              THEN 0 ELSE 1 END AS bit) AS selected
FROM   dbo.Table1

错误: IN-Keyword附近的语法错误 THEN-Keyword附近的语法错误

我用谷歌搜索但我没有找到一个带有IN运算符的Case的示例 有人可以告诉我什么是错的

非常感谢任何建议

2 个答案:

答案 0 :(得分:2)

只需删除IS即可使用(这只是为了直接回答您的问题而不是其他任何内容(例如,绩效改进)

SELECT dbo.Table1.*,
       CAST (CASE WHEN Table1.Id  IN ( SELECT Id 
                                         FROM dbo.Table2 
                                         WHERE RefRolleId =@Id) 
              THEN 0 ELSE 1 END AS bit) AS selected
FROM   dbo.Table1

答案 1 :(得分:2)

@JW是正确的,但我建议更改您的查询,例如:

SELECT DISTINCT T.*,
       CAST (CASE 
                WHEN T2.Id IS NOT NULL
                THEN 0 
                ELSE 1 
             END AS bit) AS selected
FROM   dbo.Table1 T
   LEFT JOIN dbo.Table2 T2 ON T.Id = T2.Id AND T2.RefRolleId =@Id

我认为这可能会带来更好的表现。

祝你好运。