2013-03-19 50 views
-3

在以下查詢中,t2.stock它有兩個值(10)。我想要1值的輸出爲IN0的值爲OUT。問題是我不能在這種類型的查詢中使用CASE表達式。有沒有辦法做到這一點?動態SQL中不能使用CASE表達式

use DB1 
go 

declare @SQL varchar(500), 

Set @SQL=' select t1.ID,t1.Name,t2.stock 
    from table1 t1 
     inner join table2 t2 on t1.ID = t2.ID' 

exec (@SQL) 
+7

爲什麼你不能使用'CASE'聲明? – Lamak 2013-03-19 14:05:38

+0

同意@Lamak。請解釋***爲什麼***不能使用'CASE'。 – 2013-03-19 16:20:10

回答

0

但是你可以動態SQL使用case聲明:

use DB1 
go 

declare @SQL varchar(500), 

Set @SQL=' 
select t1.ID, t1.Name, (case when t2.stock = 1 then ''IN'' else ''OUT'' end) as stock 
from table1 t1 
    inner join table2 t2 on t1.ID = t2.ID 
' 

exec (@SQL) 
+3

OP *不能*使用「CASE」。 – Kermit 2013-03-19 14:15:50

+0

@AarolamaBluenk。 。 。聲明是「問題是我不能在這種類型的查詢中使用」CASE「語句」我認爲用戶不知道如何在動態SQL中使用case語句,如果存在環境限制或如果這是一項家庭作業,那麼問題應該更清楚。 – 2013-03-19 14:31:58

+2

@ GordonLinoff我同意你的解釋,但我們需要進一步澄清有關限制,這就是爲什麼我發表評論,而不是僅僅回答*使用'CASE' * – Lamak 2013-03-19 14:34:28

5

如果這種類型的查詢的你的意思是一個動態查詢,那麼你可能有一些誤解約CASE和/或動態查詢。通常,在動態查詢中使用CASE表達式可能沒有問題,其中的一個示例可以在@Gordon Linoff's answer中看到。

但是,如果你絕對堅持,有在您的情況一種替代方案:

use DB1 
go 

declare @SQL varchar(500); 

Set @SQL=' select t1.ID, t1.Name, v.description as stock 
    from table1 t1 
     inner join table2 t2 on t1.ID = t2.ID 
     inner join ( values (1, ''IN''), (0, ''OUT'') ) t2 (stock, description) on t2.stock = v.stock 
'; 
exec (@SQL);