SQL PIVOT SELECT FROM LIST (IN SELECT)

36,448

Solution 1

If dynamic SQL is out then I'm afraid the answer is no, it can't be done. The parser needs to know the values up front to perform the pivot to columns.

Solution 2

It Can be done.

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)
Share:
36,448
live-love
Author by

live-love

Updated on July 31, 2022

Comments

  • live-love
    live-love almost 2 years

    Is it possible to do a PIVOT and select list from a table, instead of using single values?

    Like this (incorrect syntax error):

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

    This one compiles, but doesn't work for me:

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

    PS: I do NOT want to use dynamic SQL, is there a way to do this without using dynamic SQL?

  • rvphx
    rvphx almost 12 years
    Thats what the point is. CoderGal doesnt want to use dynamic SQL.
  • Jez
    Jez over 7 years
    Why doesn't the parser know the values up front? It could complete the SELECT query first.
  • Jay
    Jay over 7 years
    It may not help the poster, but it helped to remind me that its possible! so +1
  • QHarr
    QHarr about 4 years
    Where does rm come from? Some sample data along would have helped this example.
  • mo_maat
    mo_maat over 3 years
    Great solution. Thanks. I think that second line should be a SELECT, not a SET.