crj*_*unk 11 sql t-sql sql-server sql-server-2008
可以在IN子句中使用CASE语句吗?
这是我试图正确编译的简化版本:
SELECT * FROM MyTable
WHERE StatusID IN (
CASE WHEN @StatusID = 99 THEN (5, 11, 13)
ELSE (@StatusID) END )
Run Code Online (Sandbox Code Playgroud)
谢谢!
Red*_*ter 25
CASE仅返回标量值.你可以这样做.(我假设,根据您的示例,当@StatusID = 99时,StatusID值为99不匹配.)
select *
from MyTable
where (@StatusID = 99 and StatusID in (5, 11, 13))
or (@StatusID <> 99 and StatusID = @StatusID)
Run Code Online (Sandbox Code Playgroud)
不。相反,您可以将其放在外面
SELECT *
FROM MyTable
WHERE 1 = (CASE WHEN @StatusID = 99 and StatusId in (5, 11, 13) then 1
WHEN coalesce(@StatusId, 0) <> 99 and StatusId in (@StatusID) then 1
ELSE 0
END)
Run Code Online (Sandbox Code Playgroud)
您也可以不使用 case 语句来编写此内容。
另一种选择是动态 SQL,您实际上使用 SQL 语句创建一个字符串,然后执行它。然而,在这种情况下,动态 SQL 似乎有点矫枉过正。
| 归档时间: |
|
| 查看次数: |
24535 次 |
| 最近记录: |