Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/02/2008, 07:42
MarioHeredia
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 17 años, 1 mes
Puntos: 3
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