2011-05-19 93 views
11

是否有可能做一個支點和選擇列表從表中,而不是使用單一的價值?SQL PIVOT選擇列表(SELECT)

像這樣(不正確的語法錯誤):

SELECT * 
FROM (
    SELECT RepID, MilestoneID, ResultID FROM RM 
) AS src 
PIVOT (
    MAX(ResultID) FOR MilestoneID IN (SELECT id FROM m) 
) AS pvt 

這一次編譯,但對我不起作用:

SELECT * 
FROM (
    SELECT RepID, MilestoneID, ResultID FROM RM 
) AS src 
PIVOT (
    MAX(ResultID) FOR MilestoneID IN ([1], [2], [3], [4]) 
) AS pvt 

PS:我不想使用動態SQL,是有沒有辦法做到這一點,而不使用動態SQL?

+0

不幸的是,不幸的是,您需要指定'IN'子句中的值。您可以使用動態SQL來檢查這些值,然後執行結果語句。 – Yuck 2011-05-19 14:55:55

回答

9

如果動態SQL是出那麼恐怕答案是否定的,它無法做到的。解析器需要預先知道值以執行對列的透視。

+1

解析器爲什麼不知道前面的值?它可以先完成「SELECT」查詢。 – Jez 2016-12-09 19:05:54

0

是可以做到的。

DECLARE @idList varchar(500) 
SET @idList = COALESCE(@idList + ',', '') + id 
FROM m 


DECLARE @sqlToRun varchar(1000) 
SET @sqlToRun = ' 
SELECT * 
FROM ( 
    SELECT RepID, MilestoneID, ResultID FROM RM 
) AS src 
PIVOT ( 
    MAX(ResultID) FOR MilestoneID IN ('+ @idList +') 
) AS pvt' 

EXEC (@sqlToRun) 
+1

那就是要點。 CoderGal不想使用動態SQL。 – rvphx 2012-06-11 16:39:28

+1

它可能不會幫助海報,但它有助於提醒我它可能!所以+1 – Jay1b 2017-01-09 14:10:04