Converter dados de linha para coluna no SQL Server
Hoje meu colega me pediu para transformar dados de uma tabela de teste vertical em uma tabela horizontal. Quero dizer, transformar linhas em colunas. Eu usei o PIVOT e resolvi isso. Mas entrei em uma situação em que estou tendo problemas para mover dados se o campo de dados se repetir.
Aqui estão os dados de teste em que estou trabalhando:
CREATE TABLE STAGING
(
ENTITYID INT,
PROPERTYNAME VARCHAR(25),
PROPERTYVALUE VARCHAR(25)
)
INSERT INTO STAGING VALUES (1, 'NAME', 'DONNA')
INSERT INTO STAGING VALUES (1, 'SPOUSE', 'HENRY')
INSERT INTO STAGING VALUES (1, 'CHILD', 'JACK')
INSERT INTO STAGING VALUES (2, 'CHILD', 'KAYALA')
Eu usei o PIVOT para mostrar os dados da linha como colunas:
SELECT * FROM
(SELECT ENTITYID, PROPERTYNAME, PROPERTYVALUE FROM STAGING) AS T
PIVOT (MAX(PROPERTYVALUE) FOR PROPERTYNAME IN (NAME, SPOUSE, CHILD)) AS T2
A saída é:
ENTITYID NAME SPOUSE CHILD
1 DONNA HENRY JACK
2 NULL NULL KAYALA
Mas ele queria a saída algo como:
ENTITYID NAME SPOUSE CHILD CHILD
1 DONNA HENRY JACK KAYALA
A linha inferior é que pode haver mais de um atributo CHILD entrando na tabela de teste. E precisamos considerar isso e mover todas as CRIANÇAS para as colunas.
Isso é possível?