martes, 31 de marzo de 2009

Oracle: Unpivot artesanal

Todos estamos esperando utilizar el Oracle 11 que nos ahorre estos dolores de cabeza, pero mientras llega...

Si alguna vez se han preguntado ¿Puedo cambiar mis columnas a filas? Ejemplo:

Tenemos:
UNIDAD VALOR1 VALOR2 VALOR3
1 100 200 300
2 400 500 600

Queremos:
UNIDAD VALOR PRECIO
1 VALOR1 100
1 VALOR2 200
1 VALOR3 300
2 VALOR1 400
2 VALOR2 500
2 VALOR3 600

Sí! Es posible! Esto se llama unpivot, y la forma de hacerlo 'a la antigua' es:

SELECT UNIDAD, 'VALOR'l as VALOR,
DECODE(l, 1, VALOR1,
DECODE(l, 2, VALOR2,
DECODE(l, 3, VALOR3,
DECODE(l, 4, VALOR4,
DECODE(l, 5, VALOR5,
DECODE(l, 6, VALOR6 )))))) UNPIVOT
FROM TABLA,
(SELECT level l FROM DUAL X CONNECT BY LEVEL <= 6) NIVEL;

Esta es la página donde aparece el ejemplo:

http://www.club-oracle.com/forums/f6/unpivoting-column-to-row-conversion-techniques-sql-t145/

No hay comentarios:

Publicar un comentario