连接SQL变量中的CASE值

时间:2019-03-15 16:30:11

标签: sql sql-server

我试图将匹配的大小写值放在T-SQL中的变量中。 所以我的情况是 如果案例是MATCHED,则应将其保留在变量中,否则应跳过case语句。 所以我试图连接所有匹配的情况,并将结果保存在一个@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 由于情况1和情况3是匹配的,情况2是不匹配的。

但是运行此查询后,我收到了错误消息:

  

信息102,级别15,状态1,第8行在'='附近的语法不正确。

有人可以帮助我运行此查询吗?

3 个答案:

答案 0 :(得分:0)

这不能使用大小写来完成,但是可以使用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

答案 1 :(得分:0)

不幸的是,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语句退出。

如果您需要多个CASE之一的输出,则需要使用多个IF语句而不是嵌套的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'

答案 2 :(得分:0)

您可以像这样使用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) ;