Convertir datos de fila a columna en SQL Server
Hoy mi colega me pidió que transformara los datos de una tabla de preparación vertical en una tabla horizontal. Me refiero a transformar filas en columna. Utilicé PIVOT y lo resolví. Pero me metí en una situación en la que tengo problemas para mover datos si el campo de datos se repite.
Aquí están los datos de prueba en los que estoy trabajando:
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')
Usé PIVOT para mostrar los datos de las filas como columnas:
SELECT * FROM
(SELECT ENTITYID, PROPERTYNAME, PROPERTYVALUE FROM STAGING) AS T
PIVOT (MAX(PROPERTYVALUE) FOR PROPERTYNAME IN (NAME, SPOUSE, CHILD)) AS T2
La salida es:
ENTITYID NAME SPOUSE CHILD
1 DONNA HENRY JACK
2 NULL NULL KAYALA
Pero él quería la salida algo así como:
ENTITYID NAME SPOUSE CHILD CHILD
1 DONNA HENRY JACK KAYALA
La conclusión es que puede haber más de un atributo CHILD en la tabla de preparación. Y debemos considerar esto y mover a todos los NIÑOS a columnas.
es posible?