我也有类似的3-4脚本不同的表作为以前发布的 动态PIVOT多个表Dynamic Pivot (row to columns)如何创建临时表,同时加入的是必须PIVOT
目标: - 创建一个Excel文件,加入所有从枢转表中的字段(均来自每个表中的行)
步骤:
(枢轴上不同的表之后)创建为每个单独设置临时表
JOIN对列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:相同的代码PIVOT为MYTABLE
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:同一代码PIVOT for OurTable **
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:你的问题的
select * from #T1
inner join #T1.id=#T2.id
inner join #T1.id=#T3.id
能否请您发表你试过的完整代码?还可以尝试修改上一个问题中解释问题的[** working demo **](http://sqlfiddle.com/#!3/db967/2)。这将非常有帮助。 –
已经定义了“#t1”,“#t2”和“#t3”吗?还是你想创建临时表? – Taryn
不可以,因为它们依赖于来自每个Pivot案例的动态结果集,所以它们不能被定义。我试图将每个Pivot结果保存到它们各自的临时表中。我没有使用表变量。 – Rodricks