2011-05-19 94 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