1

テーブルtb3があり、id、name、salはSELECTステートメントを使用して表示され、city、descripフィールドはSELECT、フラグが「Y」の場合にのみ同じステートメントに表示される必要があります。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 の結果セットには、列の固定セットがあります。行ごとに列の数を変えることはできません。列または単語のいずれかが必要な場合はcity、これらの 2 つの列を結合して 1 つの値にする必要があります。descripinactive

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

または、それらを 2 つの列として保持し、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」のいずれかを保持し、結果の 1 つのタイプのみを返します。最後の行のフラグ値が「Y」の場合、すべての行にcity,descripが表示され、最後の行のフラグ値が「N」の場合、その行のフラグ列の結果に関係なく「非アクティブ」が表示されます。

于 2012-05-11T05:21:09.583 に答える