Reputation: 217
How can I use this:
select name from [linkedserver3].master.sys.databases
select name from [linkedserver4].master.sys.databases
select name from [linkedserver5].master.sys.databases
to make this:
Is there a way to use a pivot to do this?
I was trying to create a temp table, but with syntax errors (obviously):
create table #temp
(SQL3 NVARCHAR(200),
SQL4 NVARCHAR(200),
SQL5 NVARCHAR(200)
)
GO
INSERT INTO #temp (SQL3)
select name from [linkedserver3].master.sys.databases,NULL,NULL
GO
INSERT INTO #temp (SQL4)
NULL,select name from [linkedserver4].master.sys.databases,NULL
GO
INSERT INTO #TEMP (SQL5)
NULL,NULL,select name from [linkedserver5].master.sys.databases
GO
DROP TABLE #TEMP
Is there a way to PIVOT
and then UNPIVOT
?
Upvotes: 1
Views: 95
Reputation: 35780
You can number rows for each select and then do a full join
:
;WITH cte1 AS(SELECT name, ROW_NUMBER() OVER(ORDER BY name) rn FROM [linkedserver3].master.sys.databases),
cte2 AS(SELECT name, ROW_NUMBER() OVER(ORDER BY name) rn FROM [linkedserver4].master.sys.databases),
cte3 AS(SELECT name, ROW_NUMBER() OVER(ORDER BY name) rn FROM [linkedserver5].master.sys.databases)
SELECT * FROM cte1 c1
FULL JOIN cte2 c2 ON c1.rn = c2.rn
FULL JOIN cte3 c3 ON c1.rn = c3.rn OR c2.rn = c3.rn
Upvotes: 3