Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/05/2015, 07:45
Avatar de Doglas
Doglas
 
Fecha de Ingreso: mayo-2015
Mensajes: 22
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Reporte de descansos medicos

Hola muchachos. Resolví en parte el problema que tengo con el siguiente query:
Código SQL:
Ver original
  1. SELECT c_c_codigo,c_n_secuencia,d_inicio,d_fin,n_n_dias_procesados,c_c_mes_anho_ini,c_c_mes_anho_fin, n_n_dia_ini,n_n_dia_fin,
  2.     CASE WHEN (substr(d_fin,4,2) <> substr(d_inicio,4,2)) AND (d_inicio BETWEEN to_date('&fecha_ini','dd/mm/yyyy') AND to_date('&fecha_fin','dd/mm/yyyy')) THEN (CASE substr(d_inicio,4,2) WHEN '12' THEN to_date('31/12/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  3.         WHEN '11' THEN to_date('30/11/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  4.         WHEN '10' THEN to_date('31/10/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  5.         WHEN '09' THEN to_date('30/09/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  6.         WHEN '08' THEN to_date('31/08/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  7.         WHEN '07' THEN to_date('31/07/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  8.         WHEN '06' THEN to_date('30/06/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  9.         WHEN '05' THEN to_date('31/05/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  10.         WHEN '04' THEN to_date('30/04/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  11.         WHEN '03' THEN to_date('31/03/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  12.         WHEN '02' THEN CASE sigarp.uf_anho_bisiesto(to_number(substr(to_char(d_inicio,'dd/mm/yyyy'),7,4)))
  13.         WHEN 1 THEN to_date('29/02/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  14.         WHEN 0 THEN to_date('28/02/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  15.         END
  16.         WHEN '01' THEN to_date('31/01/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
  17.       END)
  18.       WHEN (substr(d_fin,4,2) <> substr(d_inicio,4,2)) AND (d_fin BETWEEN to_date('&fecha_ini','dd/mm/yyyy') AND to_date('&fecha_fin','dd/mm/yyyy')) THEN (CASE substr(d_fin,4,2) WHEN '12' THEN d_fin - to_date('01/12/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  19.       WHEN '11' THEN d_fin - to_date('01/11/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  20.       WHEN '10' THEN d_fin - to_date('01/10/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  21.       WHEN '09' THEN d_fin - to_date('01/09/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  22.       WHEN '08' THEN d_fin - to_date('01/08/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  23.       WHEN '07' THEN d_fin - to_date('01/07/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  24.       WHEN '06' THEN d_fin - to_date('01/06/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  25.       WHEN '05' THEN d_fin - to_date('01/05/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  26.       WHEN '04' THEN d_fin - to_date('01/04/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  27.       WHEN '03' THEN d_fin - to_date('01/03/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  28.       WHEN '02' THEN d_fin - to_date('01/02/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  29.       WHEN '01' THEN d_fin - to_date('01/01/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
  30.       END)                        
  31.       WHEN substr(d_fin,4,2) = substr(d_inicio,4,2) THEN d_fin - d_inicio + 1
  32.      
  33.     END Dias
  34. FROM sigarp.asistencia_ocurrencia
  35. WHERE c_c_codigo BETWEEN '000000000000000' AND '999999999999999'
  36. AND (d_inicio BETWEEN to_date('&fecha_ini','dd/mm/yyyy') AND to_date('&fecha_fin','dd/mm/yyyy') OR d_fin BETWEEN to_date('&fecha_ini','dd/mm/yyyy') AND to_date('&fecha_fin','dd/mm/yyyy'));

Y muestra lo siguiente:

c_c_codigo c_n_secuencia d_inicio d_fin dias
28014 140352 23/01/2014 24/01/2014 2
06787 140353 21/01/2014 23/01/2014 3
27034 140354 22/01/2014 24/01/2014 3
13832 140355 24/01/2014 25/01/2014 2
23010 132516 05/10/2013 02/01/2014 2
95184 140204 15/01/2014 16/01/2014 2
24044 140205 16/01/2014 17/01/2014 2
11053 140206 16/01/2014 16/01/2014 1
95324 140207 15/01/2014 16/01/2014 2
95176 140208 16/01/2014 16/01/2014 1
96118 140209 16/01/2014 16/01/2014 1
99148 140210 14/01/2014 15/01/2014 2
32025 140212 13/01/2014 13/01/2014 1
32025 140213 14/01/2014 14/01/2014 1

El query muestra el resultado mensual, pero quisiera que lo haga para 2, 3 o mas meses. Agradeceré su ayuda.

Última edición por gnzsoloyo; 11/05/2015 a las 08:14