簡體   English   中英

如何使用表變量進行動態數據透視?

[英]How to dynamic pivot with a table variable?

我有一個名為:@ table2的表變量,其中包含...

col1 -- col2
id   -- 101
name -- Banana
age  -- 20
id   -- 102
name -- Pudding
age  -- 21

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(@trial2.col1) 
            FROM @trial2 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT *, ' + @cols + ' from ( select * from @trial2 ) x pivot ( max(col2) for col1 in (' + @cols + ') ) p ORDER BY p.s' execute(@query)


我遇到此錯誤:“必須聲明標量變量“ @ trial2””,在“選擇@cols = STUFF((選擇不同的','+ QUOTENAME(@ trial2.col1)””行中)
但是,當我將“ @ trial2.col1”更改為“ col1”時,另一個錯誤提示:“必須聲明表變量“ @ trial2””,您能幫我做什么?

該查詢很可能運行良好,直到您執行生成的SQL。 該查詢的結果:

DECLARE @cols AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
DECLARE @trial2 table( col1 varchar(100) NOT NULL , col2 varchar(100) NOT NULL )

INSERT INTO @trial2    ([col1], [col2])
VALUES     ('id', '101'),('name', 'Banana'),('age', '20'),('id', '102'),('name', 'Pudding'),('age', '21')

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(t.col1) 
            FROM @trial2 t
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query = 'SELECT *, ' + @cols + ' from 
            (
                select *
                from @trial2 t
           ) x
            pivot 
            (
                max(col2)
                for col1 in (' + @cols + ')
            ) p 
            ORDER BY p.s'

select(@query)

是:

SELECT *, [age],[id],[name] from ( select * from @trial2 t ) x pivot ( max(col2) for col1 in ([age],[id],[name]) ) p ORDER BY p.s

問題是,在執行該字符串時,@ trial2不存在。 我認為您應該將該表變量持久保存到臨時表(#trial2)中,然后可以期望動態SQL查找所需的表。

另外,您不應在最終查詢中嘗試使用'SELECT *,'+ @cols,實際上,您不應在任何生產代碼中使用select *。

另請參閱此sqlfiddle: http ://sqlfiddle.com/#!6/68b32/592

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM