2012-05-11 50 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