Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Crear periodos de Meses,Bimestres,Trimestres, Cuatrimestres,Semestres,Anualidad.

Estas en el tema de Crear periodos de Meses,Bimestres,Trimestres, Cuatrimestres,Semestres,Anualidad. en el foro de Oracle en Foros del Web. Hola ! Que tal a todos hace poco que soy integrante de este fabuloso sitio y empiezo preguntando en vez de ayudar bueno disculpas por ...
  #1 (permalink)  
Antiguo 20/11/2010, 14:57
Avatar de magiaurbana  
Fecha de Ingreso: noviembre-2010
Ubicación: lejos
Mensajes: 9
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Crear periodos de Meses,Bimestres,Trimestres, Cuatrimestres,Semestres,Anualidad.

Hola ! Que tal a todos hace poco que soy integrante de este fabuloso sitio y empiezo preguntando en vez de ayudar bueno disculpas por eso...

Bueno pero entrando en materia tengo que hacer un query que realice lo siguiente:

Tengo un tabla llamada tb_costos ejemplo es una mas grande jejeje

cve_ceco cve_cta fecha saldo
1COAD0001 100 01/01/2010 2
1COAD0001 200 01/01/2010 2
1COAD0001 400 03/01/2010 2
1COAD0001 500 05/01/2010 2
1COAD0002 500 05/01/2010 2
1COAD0002 100 06/01/2010 2
1COAD0002 100 06/04/2010 2
1COAD0002 200 06/04/2010 2
1COAD0002 800 09/04/2010 2
1COAD0002 800 09/04/2009 2
1COAD0003 400 09/04/2009 2
1COAD0003 400 09/02/2010 2
1COAD0003 400 09/12/2010 2
1COAD0003 500 09/10/2010 2
1COAD0003 500 09/10/2010 4

La idea es formar una tabla 3 columnas Año ,periodo, saldo con la información de la otra tabla anterior

año periodo saldo
2009 M04 4
2010 M01 12
2010 M02 2
2010 M04 6
2010 M10 2
2010 M10 4
2010 M12 2
2009 B02 4
2010 B01 14
2010 B02 6
2010 B05 6
2010 B06 2

Tengo el siguiente query para los meses y bimestres
---MESES
SELECT extract( YEAR from FECHA) as anio,'M'||to_char(FECHA,'MM')as periodo,SUM(saldo)
FROM TB_COSTOS GROUP BY extract( YEAR from FECHA),to_char(FECHA,'MM'), saldo UNION ALL
---BIMESTRES
SELECT EXTRACT(YEAR FROM FECHA) AS ANIO,
CASE
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 1 AND 2 THEN 'B01'
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 3 AND 4 THEN 'B02'
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 5 AND 6 THEN 'B03'
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 7 AND 8 THEN 'B04'
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 9 AND 10 THEN 'B05'
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 11 AND 12 THEN 'B06'
END AS PERIODO,
SUM
(
CASE
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 1 AND 2 THEN SALDO
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 3 AND 4 THEN SALDO
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 5 AND 6 THEN SALDO
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 7 AND 8 THEN SALDO
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 9 AND 10 THEN SALDO
WHEN EXTRACT(MONTH FROM FECHA) BETWEEN 11 AND 12 THEN SALDO ELSE 0
END) AS SALDO

FROM TB_COSTOS GROUP BY EXTRACT(YEAR FROM FECHA),EXTRACT(MONTH FROM FECHA)


Aqui ejecuto la consulta del query bimestres, pero el problema es que no acumula los bimestres

año periodo saldo
2009 B02 4
2010 B01 12
2010 B01 2
2010 B02 6
2010 B05 6
2010 B06 2

aqui deberia haber sumado los dos B01 para que el resultado fuera asi

año periodo saldo
2009 B02 4
2010 B01 14
2010 B02 6
2010 B05 6
2010 B06 2

bueno por consecuencia los demas querys trimestre,cuatrimestre,semestre se comportan igual, necesito de su apoyo para hacer esto saber si hay otra manera de hacerlo o en que esta mal mi query.

Última edición por magiaurbana; 20/11/2010 a las 17:09 Razón: ninguna hay
  #2 (permalink)  
Antiguo 22/11/2010, 10:05
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Crear periodos de Meses,Bimestres,Trimestres, Cuatrimestres,Semestres,Anua

Buenos días magiaurbana... creo que el problema en la consulta para los bimestres está aquí

Código SQL:
Ver original
  1. GROUP BY EXTRACT(YEAR FROM FECHA),EXTRACT(MONTH FROM FECHA)

es decir, aquí estás agrupando por año y POR MES, por lo tanto nunca se acumularán los bimestres. Intenta con esto a ver si te funciona:

Código SQL:
Ver original
  1. GROUP BY EXTRACT(YEAR FROM fechaini),
  2. CASE
  3. WHEN EXTRACT(MONTH FROM fechaini) BETWEEN 1 AND 2 THEN 'B01'
  4. WHEN EXTRACT(MONTH FROM fechaini) BETWEEN 3 AND 4 THEN 'B02'
  5. WHEN EXTRACT(MONTH FROM fechaini) BETWEEN 5 AND 6 THEN 'B03'
  6. WHEN EXTRACT(MONTH FROM fechaini) BETWEEN 7 AND 8 THEN 'B04'
  7. WHEN EXTRACT(MONTH FROM fechaini) BETWEEN 9 AND 10 THEN 'B05'
  8. WHEN EXTRACT(MONTH FROM fechaini) BETWEEN 11 AND 12 THEN 'B06'
  9. END

Esto mismo aplicaría para los demás periodos que quieres manejar.

Saludos y espero que te sirva el código.
Leo.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:47.