2012-05-11 27 views
1

我有一个表tb3,其中id,name,sal将使用select语句和city显示,descrip字段需要在同一个select语句中仅在标志是'Y'。我如何使用案例陈述来做到这一点?在sql server的select语句中使用case返回多个字段

 id name sal city descrip flag 
     7 john 80000.00 Canada prog y 
     6 jone 90000.00 NY test y 
     3 san 70000.00 NY  lead y 
     2 sam 70000.00 Cali sub n 
     1 sally 60000.00 Canada archi n 
     4 carl 70000.00 SA plain n 

我需要做这样的事情。我知道这是错的,但对于一个样本PLS甲肝看看..

 declare @test varchar(1) 
     select @test=flag from tb3 
     select id,name,case @test 
     when 'Y' then select city,descrip from tb3 
     when 'n' then 'inactive' 
     end as status from tb3 
+0

'VARCHAR(1)'是没有意义的 - 它是0或1个字符,但'var'部分增加了至少2个字节的开销为。任何5个字符或更少的字符串都应该是'char(x)' - 在你的情况下:'char(1)' –

回答

0

您可以直接使用标志列的名称如下

更新时间:

select id,name ,case flag 
when 'Y' then (city +' ' +descrip) 
when 'N' then 'inactive' 
end as status 
from tb3 

如何使用@Test,b因为它是varchar(1)变量,它将保持'Y'或'N',这将只返回一种类型的结果。如果最后一行标记值为'Y',则所有行将显示城市,描述并且如果最后一行标记值是'N',那么将显示'非活动',而不管该行的标志列结果如何。

+0

谢谢你的回应。我照你的说法做了。但有一个错误..'不正确的语法附近','。 – user1080139

+0

@ user1080139,你想显示的城市,描述为列或城市+''+ descrip会为你工作吗? –

+0

@ user1080139,请查看此查询。 –

1

SQL中的结果集有一个固定的一组列 - 您不能在逐行基础上更改有多少列。如果你想要的东西,或者是列citydescrip或单词inactive,那么你就必须对那些两列连接在一起成一个单一的值:

select id,name, 
    CASE WHEN flag='Y' then city + ',' + descrip ELSE 'inactive' END as status 
from tb3 

或者,你可以让他们两个列,并且将它们设置为NULL时不恰当:

select id,name, 
    CASE WHEN flag='Y' then city END as city, 
    CASE WHEN flag='Y' then descrip END as descrip 
from tb3 
+0

:它的工作原理!谢谢!!! – user1080139