2013-03-13 30 views
2

嗨,我是Sql編程新手。如何在數據透視表的「in」子句中寫入select查詢?

我有一個表「TEMP」有兩個字段「姓名」 &「軟件」

我旋轉顯示的名字,對他的軟件版本號的表。

我爲支點查詢:

select * from temp 
pivot(count(Software) for Software in ([Professional],[Personal],[Standard])) as PVT 

,但不是在in ([Professional],[Personal],[Standard])

賦予靜態值,我想從選擇查詢軟件的名稱應該是:select distinct software from temp

當我把這個select查詢寫入in子句中會給出錯誤。

我該如何做到這一點?

請幫忙。提前致謝。

+0

該列表必須是靜態項目的預定義列表。想象一下,列表將是一個動態列表:在查詢的編譯時列名是未知的。解析器應該如何檢查語法? – Claude 2013-03-13 07:29:48

+0

先生,我在互聯網上搜索,我發現將查詢存儲在一個變量,並將該變量傳遞給'in'子句。但實際上我不知道如何實現這一點。? @Michael – 2013-03-13 07:41:23

+2

在這種情況下,您必須以動態方式構建您的整個查詢,並且必須使用'exec'執行它。 – Claude 2013-03-13 07:55:39

回答

2
Declare @cols nvarchar(max) 
select @cols = 
stuff((select distinct ',[' + Ltrim(rtrim(Software)) +']' from temp FOR XML PATH('')),1,1,''); 

EXEC('select * from temp pivot(count(Software) for Software in ('[email protected]+')) as PVT') 

的@cols變量將包含從查詢select distinct Software from temp爲XML格式取出的行:即[Standard],[Personal],[Professional],然後將結果發送到使用EXEC()功能樞軸查詢語句。

相關問題