0

私はテーブルを持っています

DECLARE @T TABLE(Val1 VARCHAR(20), Id INT, Val2 INT)
INSERT INTO @T VALUES
    ('X',1,2),
    ('Y',2,3)

PIVOT (STATIC) を実行する場合、クエリは次のとおりです。

SELECT ID, [X],[Y] from @T             
                PIVOT 
                (
                     MAX(Val2)
                     FOR Val1 IN ([X],[Y])
                ) AS X          
                ORDER BY 1

期待どおりに動作します。Dynamic PIVOT で同じことを行うにはどうすればよいでしょうか?

私の試み

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(Val1) 
                    from @T                   
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = N'SELECT ID, ' + @cols + N' from @T             
            PIVOT 
            (
                 MAX(Val2)
                 FOR Val1 IN (' + @cols + N')
            ) AS X          
            ORDER BY 1'

exec sp_executesql @query

エラー:

Msg 1087, Level 15, State 2, Line 1
Must declare the table variable "@T".
4

1 に答える 1

1

動的 SQL は異なるコンテキストで実行されるため、テーブル変数はありません。代わりに一時テーブル (#T) を使用してください。

于 2015-10-31T05:53:34.350 に答える