【问题标题】:Could not execute properly the Dynamic Pivot?无法正确执行动态枢轴?
【发布时间】:2016-01-31 14:50:45
【问题描述】:

我有一张桌子

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".

【问题讨论】:

    标签: sql-server tsql pivot dynamic-pivot


    【解决方案1】:

    动态 SQL 在不同的上下文中执行,因此它不会有表变量。请改用临时表 (#T)。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2018-01-23
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      相关资源
      最近更新 更多