SQL – Inserción en múltiples tablas – Pivoting insert

Una utilización adicional de la sentencia INSERT ALL, puede ser realizada cuando se desea transformar un registro no normalizado en varios registros “normalizados”

Por ejemplo, asumiendo que se tiene una tabla VENTAS con los totales de las ventas realizadas por cada vendedor durante los distintos meses del año, desde Enero hasta Diciembre; como lo muestra la siguiente tabla, las ventas para el empleado con Id=1 para los años 2004 y 2005

IDVENDEDORVENTAS_ENEROVENTAS_FEBREROVENTAS_DICANIO
160008000100002005
15000700095002004

y se desea trasladar los datos a una tabla VENTAS_HISTORIA que tiene la siguiente descripción:

IDVENDEDOR NUMBER
ANIO NUMBER
TOTAL_VENTAS NUMBER

se podría usar la sentencia INSERT ALL de la siguiente manera

INSERT ALL
INTO ventas_historia VALUES (idVendedor, anio, ventas_enero)
INTO ventas_historia VALUES (idVendedor, anio, ventas_febrero)
INTO ventas_historia VALUES (idVendedor, anio, ventas_marzo)
INTO ventas_historia VALUES (idVendedor, anio, ventas_abril)
INTO ventas_historia VALUES (idVendedor, anio, ventas_mayo)


INTO ventas_historia VALUES (idVendedor, anio, ventas_Dic)
SELECT *
FROM ventas;

Con lo cual, cada registro registro inicial se convertiría en 12 registros a insertar en la tabla destino(un registro en la tabla ventas_historia traduce las ventas de un mes en un año determinado). Entonces, finalmente nuestros dos registro iniciales de la tabla VENTAS se transformarían en 24 registros en la tabla VENTAS_HISTORIA

Escrito por: Arturo T.
atocarrunchot at gmail dot com

Leave a Reply