Re: Generar Mes en Consulta Una vez creada la tabla con valores para dos vuelos, armamos el select para mostrar los datos en columnas.
Código:
SELECT VUELO,
MES,
MAX(DIA_01) DIA_01,
MAX(DIA_02) DIA_02,
MAX(DIA_03) DIA_03,
MAX(DIA_04) DIA_04,
MAX(DIA_05) DIA_05,
MAX(DIA_06) DIA_06,
MAX(DIA_07) DIA_07,
MAX(DIA_08) DIA_08,
MAX(DIA_09) DIA_09,
MAX(DIA_10) DIA_10,
MAX(DIA_11) DIA_11,
MAX(DIA_12) DIA_12,
MAX(DIA_13) DIA_13,
MAX(DIA_14) DIA_14,
MAX(DIA_15) DIA_15,
MAX(DIA_16) DIA_16,
MAX(DIA_17) DIA_17,
MAX(DIA_18) DIA_18,
MAX(DIA_19) DIA_19,
MAX(DIA_20) DIA_20,
MAX(DIA_21) DIA_21,
MAX(DIA_22) DIA_22,
MAX(DIA_23) DIA_23,
MAX(DIA_24) DIA_24,
MAX(DIA_25) DIA_25,
MAX(DIA_26) DIA_26,
MAX(DIA_27) DIA_27,
MAX(DIA_28) DIA_28,
MAX(DIA_29) DIA_29,
MAX(DIA_30) DIA_30,
MAX(DIA_31) DIA_31
FROM (
SELECT VUELO,
TO_CHAR(TO_DATE('&1','DD.MM.YYYY'),'MONTH') MES,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') , CANTIDAD, NULL) DIA_01,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 01, CANTIDAD, NULL) DIA_02,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 02, CANTIDAD, NULL) DIA_03,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 03, CANTIDAD, NULL) DIA_04,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 04, CANTIDAD, NULL) DIA_05,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 05, CANTIDAD, NULL) DIA_06,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 06, CANTIDAD, NULL) DIA_07,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 07, CANTIDAD, NULL) DIA_08,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 08, CANTIDAD, NULL) DIA_09,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 09, CANTIDAD, NULL) DIA_10,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 10, CANTIDAD, NULL) DIA_11,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 11, CANTIDAD, NULL) DIA_12,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 12, CANTIDAD, NULL) DIA_13,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 13, CANTIDAD, NULL) DIA_14,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 14, CANTIDAD, NULL) DIA_15,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 15, CANTIDAD, NULL) DIA_16,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 16, CANTIDAD, NULL) DIA_17,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 17, CANTIDAD, NULL) DIA_18,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 18, CANTIDAD, NULL) DIA_19,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 19, CANTIDAD, NULL) DIA_20,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 20, CANTIDAD, NULL) DIA_21,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 21, CANTIDAD, NULL) DIA_22,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 22, CANTIDAD, NULL) DIA_23,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 23, CANTIDAD, NULL) DIA_24,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 24, CANTIDAD, NULL) DIA_25,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 25, CANTIDAD, NULL) DIA_26,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 26, CANTIDAD, NULL) DIA_27,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 27, CANTIDAD, NULL) DIA_28,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 28, CANTIDAD, NULL) DIA_29,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 29, CANTIDAD, NULL) DIA_30,
DECODE(FECHA, TO_DATE('&1','DD.MM.YYYY') + 30, CANTIDAD, NULL) DIA_31
FROM (
SELECT VUELO, FECHA, CANTIDAD
FROM RICARDO_PERU
WHERE FECHA BETWEEN TO_DATE('&1', 'DD.MM.YYYY')
AND ADD_MONTHS(TRUNC(TO_DATE('&1', 'DD.MM.YYYY'), 'MONTH'), 1) - 1
)
)
GROUP BY VUELO, MES;
Fijate bien la clausula de la fecha en WHERE, ingresas una sola variable fecha, normalmente tiene que ser comienzo de mes (porque dijo normalmente, porque puedes poner otra fecha, y te mostrara los valores desde ese dia hasta que termine el mes.)
El ADD_MONTHS solamente calcula el ultimo dia del mes.
Ahora si fuera Febrero, las columnas de los dias 29 (si no fuera biciesto), 30 y 31 estarian vacias.
Use la funcion DECODE y no las tipicas funciones windowing LAG o LEAD, debido a que estas tiene un mayor consumo del block size, ademas el DECODE me da lo que necesito perfectamente.
Bueno Amigo, muchos exitos, cualquier duda avisa.
Sldo Atte, Mario.
Última edición por MarioHeredia; 12/02/2008 a las 07:43
Razón: Correcion de tipeo
|