Вы можете объединить несколько CASE в один SELECT:
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 () удалить первую точку с запятой.