1

我有一个表 tb3,其中 id、name、sal 将使用语句显示,只有当标志为“Y”时SELECT,城市、描述字段才需要显示在同一语句中。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

我需要做这样的事情..我知道这是错误的,但是请看一下示例..

       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
4

2 回答 2

1

SQL 中的结果集具有一组固定的列 - 您不能逐行更改列的数量。如果你想要的东西要么是 columnscity要么descrip是 word 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
于 2012-05-11T06:30:20.867 回答
0

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

更新:

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

你如何使用@test,因为它是 varchar(1) 变量,它将保存“Y”或“N”,这将只返回一种类型的结果。如果最后一行标志值为“Y”,则所有行都将显示城市,描述,如果最后一行标志值为“N”,则无论该行的标​​志列结果如何,它将显示“非活动”。

于 2012-05-11T05:21:09.583 回答