Reducir multiples rows a uno solo con valores en multiples columnas

Script para reducir multiple rows con datos en distintas columnas a una sola fila con todos los valores en las columnas correspondientes. 

Primero creamos la tabla para las pruebas

Create table query merge multiple rows multiple columns

Insertamos los datos de muestra

INSERT INTO CustomerOrders VALUES 

(3070001,'OP1CLR000000006',NULL,NULL,NULL),
(3070001,NULL,'OP2CLR000000006',NULL,NULL),
(3070001,NULL,NULL,'OP3CLR000000006',NULL),
(3070001,NULL,NULL,NULL,'OP4CLR000000006'),
(3070002,'OP1CLR000000007',NULL,NULL,NULL),
(3070002,NULL,'OP2CLR000000007',NULL,NULL),
(3070002,NULL,NULL,'OP3CLR000000007',NULL),
(3070003,'OP1CLR000000008',NULL,NULL,NULL),
(3070003,NULL,'OP2CLR000000008',NULL,NULL),
(3090001,'OP1CLR000000009',NULL,NULL,NULL),
(3090001,NULL,'OP2CLR000000009',NULL,NULL),
(3090001,NULL,NULL,'OP3CLR000000009',NULL),
(3090001,NULL,NULL,NULL,'OP4CLR000000009'),
(3090002,'OP1CLR000000010',NULL,NULL,NULL),
(3090002,NULL,'OP2CLR000000010',NULL,NULL),
(3090002,NULL,NULL,'OP3CLR000000010',NULL),
(3090002,NULL,NULL,NULL,'OP4CLR000000010'),
(3100001,'OP1CLR000000013',NULL,NULL,NULL),
(3100001,NULL,'OP2CLR000000013',NULL,NULL),
(3100002,NULL,'OP2CLR000000014',NULL,NULL),
(3100002,NULL,NULL,'OP3CLR000000014',NULL),
(3100003,NULL,NULL,'OP3CLR000000015',NULL),
(3100003,NULL,NULL,NULL,'OP4CLR000000015'),
(3100004,NULL,NULL,'OP3CLR000000016',NULL),
(3100004,NULL,NULL,NULL,'OP4CLR000000016'),
(3110002,NULL,'OP2CLR000000018',NULL,NULL),
(3110002,NULL,NULL,'OP3CLR000000018',NULL)

Los datos se registran una fila por cada valor de columna, quedando de la siguiente manera

merge Multiple rows multiple columns into single row

El primer paso sera obtener una fila que contenga todos los valores de las columnas asociadas al CustomerID

Se crea un CTE que agrupe los CustomerID y obtenga el valor maximo por cada columna, si la columna no tuviera ningún valor se regresa un NULL. A partir de esta tabla actualizamos la tabla para que cada fila tenga todos los valores en sus columnas correspondientes

Update merge multiple rows into single one multiple columns

Como último paso creamos una numeración para posteriormente dejar en la tabla una sola fila por cada CustomerID

Number multiple rows to single row multiple columns

El update actualizo todas las columnas con sus valores correspondientes al CustomerID

Merge Multiple rows numbered multiple columns

Para terminar con una sola fila por CustomerID

Merge multiple rows into single one multiple columns

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *