tsql - T sql Case in Where 子句
问题描述
我知道这已被问过几次,但我似乎无法解决这个问题。我在这里做错了什么?
WHERE B.ACCTSET IN CASE
WHEN @AcctSet ='Maize' THEN ('001X04','010X04')
WHEN @AcctSet ='Wheat' THEN ('002X04')
ELSE ('004X04')
END
帮助将不胜感激。
解决方案
CASE 语句只能返回一个值,因此'Maize' 行将不起作用。
CASE 语句也将在括号内。
WHERE B.ACCTSET IN (CASE
WHEN @AcctSet ='Maize' THEN '001X04'
WHEN @AcctSet ='Wheat' THEN '002X04'
ELSE '004X04'
END
)
如果结果像您的示例中一样固定,那么您可以创建一个表 var 并根据您的逻辑将记录插入其中,然后加入该表或在您的 IN() 中使用它。
DECLARE @Values TABLE( [Value] VARCHAR(6))
IF @AcctSet ='Maize'
BEGIN
INSERT INTO @Values VALUE('001X04')
INSERT INTO @Values VALUE('010X04')
END
ELSE IF @AcctSet ='Wheat'
BEGIN
INSERT INTO @Values VALUE('002X04')
END
ELSE
BEGIN
INSERT INTO @Values VALUE('004X04')
END
/..snip../
WHERE WHERE B.ACCTSET IN (SELECT [Value] FROM @Values)
推荐阅读
- c++ - 处理器如何处理未初始化的变量?
- sql-server - 按行之间的差异对 SQL 进行分组?
- javascript - Vue检查多个单选按钮
- reactjs - 从 React 中 GET 请求生成的路径加载图像
- python - Python pandas 错误:UnicodeDecodeError:'utf-8'编解码器无法解码位置 2 的字节 0xbd:无效的起始字节
- python - 为什么第 55 行不能在这个程序中编译?
- android - 如何让媒体播放器在 android minSdkVersion <24 上暂停和停止
- docker - 如何配置 Nginx 以侦听 vNIC IP?
- python - Youtube-api 验证应用程序 oauth 以从磁盘上传 yt 视频
- spring - Spring Security 总是在除 get 之外的所有请求上得到 401