Объединить значения CASE в переменной SQL - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь поместить соответствующие значения регистра в переменную в T-SQL. Мой сценарий таков: Если регистр соответствует, то он должен храниться в вариабельных значениях, а если нет, пропустить оператор регистра. Поэтому я пытаюсь объединить все соответствующие случаи и сохранить результат в одной переменной @Result. Вот мой SQL-запрос для этого:

declare @result varchar(200)
set @result=''

select 
    case 
        when 1=1 then @result=@result+'CASE 1' 
        when 1=2 then @result=@result+'CASE 2' 
        when 2=2 then @result=@result+'CASE 3'
    end

Здесь мне нужен такой результат: СЛУЧАЙ 1 ; ДЕЛО 3 Поскольку CASE 1 и CASE 3 совпадают, а CASE 2 не совпадает.

Но после выполнения этого запроса я получил ошибку:

Сообщение 102, уровень 15, состояние 1, строка 8 Неверный синтаксис рядом с '='.

Может ли кто-нибудь помочь мне выполнить этот запрос?

Ответы [ 3 ]

0 голосов
/ 15 марта 2019

К сожалению, CASE не работает так в SQL Server.CASE возвращает только одно значение, а присвоение находится за пределами регистра.Кроме того, всякий раз, когда сопоставляется CASE, оператор CASE завершается.Например, рассмотрим этот оператор CASE:

SELECT CASE
    WHEN 1 = 1
        THEN 1
    WHEN 1 = 2
        THEN 2
    WHEN 2 = 2
        Then 22
END

Выходные данные будут равны 1, поскольку после первого совпадения оператор CASE завершается.

Вам потребуется использовать несколько операторов IFвместо вложенных операторов CASE, если вам нужен вывод из более чем одного из CASE, то есть:

IF 1=1 then @result=@result+'CASE 1' 
IF 1=2 then @result=@result+'CASE 2' 
IF 2=2 then @result=@result+'CASE 3'
0 голосов
/ 15 марта 2019

Вы можете использовать case так:

select @result = @result +
                 (case when 1=1 then 'CASE 1' else '' end) +
                 (case when 1=2 then 'CASE 2' else '' end) +
                 (case when 2=2 then 'CASE 3' else '' end) ;
0 голосов
/ 15 марта 2019

Это невозможно сделать с помощью регистра, но это можно сделать с помощью операторов if ...

declare @result varchar(200)
set @result=''

if (1=1) 
   set @result = @result+'CASE 1' 

if(1=2)
    set @result=@result+'CASE 2' 

if (2=2)
    set @result=@result+'CASE 3'



print @result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...