Si UNPIVOT
está disponible, definitivamente debe usar eso. Para versiones anteriores de Oracle, puede cruzar su mesa con una tabla de los nombres de los meses (generados o preconstruidos) y luego usar descodificaciones o declaraciones de casos para seleccionar el mes, el precio y la cantidad correctos. Así es como se vería esto.
create table prices (Year Varchar2(4), JanPrc Number(3), JanQty Number(3),
FebPrc Number(5,2), FebQty Number(3), MarPrc Number(3), MarQty Number(3));
insert into prices values ('2008',1,500,1,600,1,700);
insert into prices values ('2009',50,100,20,300,30,800);
insert into prices values ('2010',60,5,70,10,80,15);
SELECT Year, Month, DECODE(MonthNumber,1,JanPrc,2,FebPrc,MarPrc) Price,
DECODE(MonthNumber,1,JanQty,2,FebQty,MarQty) Quantity
FROM Prices
CROSS JOIN (
SELECT rownum MonthNumber,
to_char(to_date(to_char(rownum,'FM00') || '2000','MMYYYY'),
'FMMonth') Month
FROM dual CONNECT BY rownum <= 3
)
ORDER BY Year, MonthNumber;
En primer lugar se aplica un periódico enrollado a la persona que "diseñado" esa mesa ... –
@Tony: Alégrate de que no hicieron '2010janprc, 2010janqty ... 2011janprc , 2011janqty ... '. :) –
¿Alguien tiene 11g dando vueltas para ver el uso de 'unpivot'? – ninesided