У меня есть таблица, в которой данные представлены в строках, а данные должны быть сведены в столбцы. В настоящее время данные идут в столбцах, но данные дублируются и расположены в неправильном порядке. Также, когда я введу более одного имени сервера, я получу столбец сервера 1 с информационным столбцом Сервер 2 будет нулевым, а в столбце сервера 3 будут данные.
Я посмотрел ответы на stackoverflow, social.msdn.microsoft.com, sqlservercentral.com и sqlshack.com
WITH
cte (Captivate_Id, Building_Name ,Server_Name,Server_Number)
as
(
SELECT b.[Captivate_Id], b.[Building_Name] as Building_Name
,(s.Server_Name) as Server_Name
,ROW_NUMBER() OVER(ORDER BY s.Server_Name DESC) AS Server_Number
FROM [CAP-CORPCRM02].[CAP_ProductionED].dbo.server s
join [CAP-CORPCRM02].[CAP_ProductionED].dbo.building b on
s.building_id = b.building_id
WHERE s.Server_Name IS NULL
UNION ALL
SELECT b.[Captivate_Id], b.[Building_Name] as Building_Name
,(s.Server_Name) as Server_Name
,ROW_NUMBER() OVER(ORDER BY s.Server_Name DESC) AS Server_Number
FROM [CAP-CORPCRM02].[CAP_ProductionED].dbo.server s
join [CAP-CORPCRM02].[CAP_ProductionED].dbo.building b on
s.building_id = b.building_id
AND b.Captivate_Id IN
(
'FFF1234'
)
)
SELECT Captivate_ID as ID,Building_Name as Building_Name,
(SELECT Server_Name FROM CTE ct WHERE ct.Building_Name=cte.Building_Name
AND ct.Server_Number=1) Server1, -----, -- works but order wrong
(SELECT Server_Name FROM CTE ct WHERE ct.Building_Name=cte.Building_Name
AND ct.Server_Number=2) Server2, -- works but order wrong
(SELECT Server_Name FROM CTE ct WHERE ct.Building_Name=cte.Building_Name
AND ct.Server_Number=3) Server3
FROM cte
выход
ID Building_Name Server1 Server2 Server3
FFF1234 some name servername1 servername2 NULL
FFF1234 some name servername1 servername2 NULL
Я ожидаю, что результат будет
ID Building_Name Server1 Server2 Server3
FFF1234 some name servername1 servername2 blank