我有一个条件,其中有多个场景,我需要检查每个场景。如果两个或多个案例匹配,我需要将结果连接起来。
我原以为是使用CASE语句的,但是我无法使用CASE语句连接多个方案。
所以我现在正在使用if语句。下面是我所做的查询:
declare @result varchar(200)
set @result=''
;with cte as
(
select * from table 1
)
if(column 1=5) set @result=@result+'case1'
if(column 2=6) set @result=@result+'case2'
if(column 3=7) set @result=@result+'case3'
if(column 4=10) set @result=@result+'case4'
select *,@result from cte
所以在这里,我需要在CTE之后立即使用Select语句,但是我不能在select语句中使用IF / ELSE语句。但是我也不能将CASE语句与变量连接在一起使用。
所以结果应该像:
id | column 1 | column 2| column 3| column 4| Result
-----------------------------------------------------
3 | 5 | 6 | 6 | 9 | case1;`case2
4 | 4 | 7 | 7 | 10 | case2
5 | 5 | 6 | 6 | 10 | case1;`case2; case4
6 | 5 | 6 | 7 | 10 | case2;case2;case3;case4
7 | 4 | 5 | 6 | 3 | No Result
任何人都可以帮助我完成此工作吗?
答案 0 :(得分:2)
您可以在单个SELECT中连接多个CASE:
SELECT
CASE WHEN 1=1 THEN 'Case1' ELSE '' END
+ CASE WHEN 2=2 THEN 'Case2' ELSE '' END
+ CASE ...
基于注释的编辑:正如您所说,如果使用IF
破坏代码确实可以解决您的问题,那么就没有问题,因为您使用的if
语句不需要完全在SELECT中。您可以简单地做到这一点:
declare @result varchar(200)
set @result=''
if(1=1) set @result=@result+'case1'
if(2=2) set @result=@result+'case2'
;with cte as
(
select * from table 1
)
select *,@result from cte
根据对原始问题的更新进行编辑:
所以我的第一个解决方案是正确的。您问题中的其他详细信息使我更清楚了。顺便说一下,您根本不能为此使用变量:
;with cte as
(
select * ,
CASE WHEN column1=5 THEN 'case1' ELSE '' END +
CASE WHEN column2=6 THEN 'case2' ELSE '' END +
CASE WHEN column3=7 THEN 'case3' ELSE '' END +
CASE WHEN column4=10 THEN 'case4' ELSE '' END AS result
from table 1
)
select *,
CASE WHEN result='' THEN 'No Result Found' ELSE result END as result
from cte
请注意,如果需要用分号分隔值(如您的问题所示),则可以在每个值前放置分号(例如';case3'
),并在最终的SELECT中使用STUFF ()删除第一个分号。
答案 1 :(得分:0)
;WITH cte AS
(
SELECT * FROM table1
)
SELECT *,(
CASE
WHEN Column1 <> 5 AND Column2 <> 6 AND Column3 <> 7 AND Column4 <> 10 THEN 'No Result'
ELSE
CASE WHEN Column1 = 5 THEN 'Case 1;' ELSE '' END +
CASE WHEN Column2 = 6 THEN 'Case 2;' ELSE '' END +
CASE WHEN Column3 = 7 THEN 'Case 3;' ELSE '' END +
CASE WHEN Column4 = 10 THEN 'Case 4;' ELSE '' END
END
)Result
FROM cte
| id | Column1 | Column2 | Column3 | Column4 | Result |
|----|---------|---------|---------|---------|------------------------------|
| 3 | 5 | 6 | 6 | 9 | Case 1;Case 2; |
| 4 | 4 | 7 | 7 | 10 | Case 3;Case 4; |
| 5 | 5 | 6 | 6 | 10 | Case 1;Case 2;Case 4; |
| 6 | 5 | 6 | 7 | 10 | Case 1;Case 2;Case 3;Case 4; |
| 7 | 4 | 5 | 6 | 9 | No Result |