以前に投稿された動的ピボット (行から列)と同様に、さまざまなテーブルを動的に PIVOT するための同様の 3 ~ 4 のスクリプトがあり ます。
目標: - Excel ファイルを作成する PIVOTed テーブルのすべてのフィールドを結合する (各テーブルのすべての行)
手順:
セットごとに個別の一時テーブルを作成します (異なるテーブルでピボットした後)
列 ID ですべての一時テーブルを結合します
結果セットからの列の選択 (すべての一時テーブル)
**最終的な選択のためにすべてのテーブルを結合する手順を使用して一時テーブルを作成するより良い方法があるかどうかを知りたい.
**一時テーブルを作成しようとしましたが、エラーが発生しました:無効なオブジェクト
前の投稿で受け入れられた回答の結果として**
INSERT into #T1 execute('execute' + @query )
select * from #T1
**
ケース 1: テーブルのピボット
DECLARE @query AS NVARCHAR(MAX),
@colsPivot as NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT ','
+ quotename('Instance'+ cast(instance as varchar(10))+'_'+c.name)
from yourtable t
cross apply sys.columns as C
where C.object_id = object_id('yourtable') and
C.name not in ('id', 'instance')
group by t.instance, c.name
order by t.instance
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'select *
from
(
select id,
''Instance''+cast(instance as varchar(10))+''_''+col col,
value
from
(
select id,
Instance,
Name,
cast(Size as varchar(50)) Size,
Tech
from yourtable
) x
unpivot
(
value
for col in (Name, Size, Tech)
) u
) x1
pivot
(
max(value)
for col in ('+ @colspivot +')
) p'
--exec(@query)
一時テーブルを作成しようとしましたが、前の投稿で受け入れられた回答の結果として、無効なオブジェクトというエラーが発生しました
INSERT into #T1 execute('execute' + @query )
select * from #T1
ケース 2: MYtable の同じコード PIVOT
DECLARE @query AS NVARCHAR(MAX),
@colsPivot as NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT ','
+ quotename('Instance'+ cast(instance as varchar(10))+'_'+c.name)
from mytable t
cross apply sys.columns as C
where C.object_id = object_id('yourtable') and
C.name not in ('id', 'instance')
group by t.instance, c.name
order by t.instance
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'select *
from
(
select id,
''Instance''+cast(instance as varchar(10))+''_''+col col,
value
from
(
select id,
Instance,
Name,
cast(Size as varchar(50)) Size,
Tech
from mytable
) x
unpivot
(
value
for col in (Name, Size, Tech)
) u
) x1
pivot
(
max(value)
for col in ('+ @colspivot +')
) p'
INSERT into #T2 execute('execute' + @query2 )
select * from #T2
** ケース 3: OurTable の同じコード PIVOT **
DECLARE @query AS NVARCHAR(MAX),
@colsPivot as NVARCHAR(MAX)
select @colsPivot = STUFF((SELECT ','
+ quotename('Instance'+ cast(instance as varchar(10))+'_'+c.name)
from ourtable t
cross apply sys.columns as C
where C.object_id = object_id('yourtable') and
C.name not in ('id', 'instance')
group by t.instance, c.name
order by t.instance
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'select *
from
(
select id,
''Instance''+cast(instance as varchar(10))+''_''+col col,
value
from
(
select id,
Instance,
Name,
cast(Size as varchar(50)) Size,
Tech
from ourtable
) x
unpivot
(
value
for col in (Name, Size, Tech)
) u
) x1
pivot
(
max(value)
for col in ('+ @colspivot +')
) p'
INSERT into #T3 execute('execute' + @query2 )
select * from #T3
最終選択:
select * from #T1
inner join #T1.id=#T2.id
inner join #T1.id=#T3.id