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
IDVENDEDOR |
VENTAS_ENERO |
VENTAS_FEBRERO |
... |
VENTAS_DIC |
ANIO |
| 1 |
6000 |
8000 |
... |
10000 |
2005 |
| 1 |
5000 |
7000 |
... |
9500 |
2004 |
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
Tomado de Zonaoracle.com