Tenho uma tabela que se parece com a seguinte:
PersonId EyeColor HairColor FavoriteTVShow FavoriteMovie FavoriteFood BirthInfo
---------- ----------- ------------ ------------------- ---------------- --------------- ------------------
A123 Brown Black The Price Is Right NULL Pizza New York City
A444 NULL Brown Friends Elf Steak Seattle
Meu conjunto de resultados desejado é este:
PersonId ColorInfo FavoriteInfo BirthInfo
-------- --------- ------------------ -------------
A123 Brown The Price Is Right New York City
A123 Black Pizza NULL
A444 Brown Friends Seattle
A444 NULL Elf NULL
A444 NULL Steak NULL
Assim, para cada PersonId, cada grupo de colunas (2 colunas ColorInfo, 3 colunas FavoriteInfo e 1 coluna BirthInfo) é transposto em linhas. Eu tentei variações de CROSS APPLY
e UNPIVOT
, mas não consigo acertar. Eu sei que é um pedido estranho, mas alguém pode pensar em uma boa maneira de fazer isso?
Agradeço antecipadamente!
Aqui está o T-SQL:
--Create the table
CREATE TABLE #test (
PersonId VARCHAR(10),
EyeColor VARCHAR(20),
HairColor VARCHAR(20),
FavoriteTVShow VARCHAR(30),
FavoriteMovie VARCHAR(30),
FavoriteFood VARCHAR(30),
BirthInfo VARCHAR(30)
)
--Populate the table
INSERT INTO #test
VALUES
('A123', 'Brown', 'Black', 'The Price Is Right', NULL, 'Pizza', 'New York City'),
('A444', NULL, 'Brown', 'Friends', 'Elf', 'Steak', 'Seattle')
--See the original result set.
SELECT *
FROM #test
--My desired result set
SELECT *
FROM ( VALUES ('A123', 'Brown', 'The Price Is Right', 'New York City'),
('A123', 'Black', 'Pizza', NULL),
('A444', 'Brown', 'Friends', 'Seattle'),
('A444', NULL, 'Elf', NULL),
('A444', NULL, 'Steak', NULL) ) t (PersonId, ColorInfo, FavoriteInfo, BirthInfo)
Eu acho que isso vai te dar o que você está procurando. Você precisa passar por alguns CTEs para desdinamizar os dados, adicionar algumas informações de atributo e girá-los de volta, mas a saída corresponde ao que você forneceu ...
Eu tive que adicionar um CTE_RawData para converter tudo para o mesmo tipo de dados, pois o unpivot não gosta de incompatibilidades ...