Hola muchachos. Resolví en parte el problema que tengo con el siguiente query:
Código SQL:
Ver originalSELECT 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,
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
WHEN '11' THEN to_date('30/11/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '10' THEN to_date('31/10/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '09' THEN to_date('30/09/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '08' THEN to_date('31/08/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '07' THEN to_date('31/07/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '06' THEN to_date('30/06/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '05' THEN to_date('31/05/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '04' THEN to_date('30/04/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '03' THEN to_date('31/03/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN '02' THEN CASE sigarp.uf_anho_bisiesto(to_number(substr(to_char(d_inicio,'dd/mm/yyyy'),7,4)))
WHEN 1 THEN to_date('29/02/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
WHEN 0 THEN to_date('28/02/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
END
WHEN '01' THEN to_date('31/01/'||substr(to_char(d_inicio,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') - d_inicio + 1
END)
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
WHEN '11' THEN d_fin - to_date('01/11/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '10' THEN d_fin - to_date('01/10/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '09' THEN d_fin - to_date('01/09/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '08' THEN d_fin - to_date('01/08/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '07' THEN d_fin - to_date('01/07/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '06' THEN d_fin - to_date('01/06/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '05' THEN d_fin - to_date('01/05/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '04' THEN d_fin - to_date('01/04/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '03' THEN d_fin - to_date('01/03/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '02' THEN d_fin - to_date('01/02/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
WHEN '01' THEN d_fin - to_date('01/01/'||substr(to_char(d_fin,'dd/mm/yyyy'),7,4),'dd/mm/yyyy') + 1
END)
WHEN substr(d_fin,4,2) = substr(d_inicio,4,2) THEN d_fin - d_inicio + 1
END Dias
FROM sigarp.asistencia_ocurrencia
WHERE c_c_codigo BETWEEN '000000000000000' AND '999999999999999'
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.