Hola
Tengo una pequeña tabla SQLite que se creó de la siguiente manera:
CREATE TABLE importes (fecha DATETIME PRIMARY KEY NOT NULL, importe REAL NOT NULL, desc TEXT)
El campo fecha, aunque ahí se declaró como DATETIME, SQLite lo guarda como un texto con el formato YYY-MM-DD.
Ahora me ha surgido obtener todos los importes guardados agrupados por meses y años, es decir, obtener una salida así:
año Ene Feb Mar .....
2010 100 200 300 ....
2011 540 320 600 ....
...
La verdad no tengo ni idea de cómo hacerlo. Como máximo habrá una fila por día guardada, aunque no tiene por qué, es decir, habrá días que no aparezcan en la base de datos y tampoco sé de antemano los años de los que habrá datos.
La aplicación se hizo hace mucho tiempo, así que no me importaría incluso modificar la tabla, así de paso le hago una pequeña actualización a la aplicación.
Un saludo
[Solucionado] SQLite: consulta agrupada por meses
Comenzado por
jc
, may 02 2014 11:07
2 respuestas en este tema
#1
Escrito 02 mayo 2014 - 11:07
#2
Escrito 02 mayo 2014 - 12:09
Saludos.
No he usado SQLite, por lo que te mostrare una idea de como se pudiera hacer:
Esto lo hice de mente, pueden haber errores y tampoco conozco las sentencias propias de SQLite para extraer los valores de año y mes de una fecha; esa parte te tocara investigar.
No he usado SQLite, por lo que te mostrare una idea de como se pudiera hacer:
delphi
SELECT EXTRACT(YEAR FROM FECHA) ANIO, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 1 THEN MONTO ELSE 0 END) ENE, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 2 THEN MONTO ELSE 0 END) FEB, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 3 THEN MONTO ELSE 0 END) MAR, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 4 THEN MONTO ELSE 0 END) ABR, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 5 THEN MONTO ELSE 0 END) MAY, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 6 THEN MONTO ELSE 0 END) JUN, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 7 THEN MONTO ELSE 0 END) JUL, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 8 THEN MONTO ELSE 0 END) AGO, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 9 THEN MONTO ELSE 0 END) SEP, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 10 THEN MONTO ELSE 0 END) OCT, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 11 THEN MONTO ELSE 0 END) NOV, SUM(CASE EXTRACT(MONTH FROM FECHA) WHEN 12 THEN MONTO ELSE 0 END) DIC FROM TABLA GROUP BY EXTRACT(YEAR FROM FECHA) ORDER BY EXTRACT(YEAR FROM FECHA)
Esto lo hice de mente, pueden haber errores y tampoco conozco las sentencias propias de SQLite para extraer los valores de año y mes de una fecha; esa parte te tocara investigar.
#3
Escrito 03 mayo 2014 - 03:23
Bueno, así me ha quedado:
Lo he probado desde SQLite Manager y funciona.
De verdad que estaba perdido, pensaba que tendría que hacer vaias consultas para obtener todos los datos.
Muchísimas gracias. Un saludo
delphi
SELECT strftime('%Y', fecha) as YEAR, sum(case strftime('%m', fecha) when '01' then importe else 0 end) Ene, sum(case strftime('%m', fecha) when '02' then importe else 0 end) Feb, sum(case strftime('%m', fecha) when '03' then importe else 0 end) Mar, sum(case strftime('%m', fecha) when '04' then importe else 0 end) Abr, sum(case strftime('%m', fecha) when '05' then importe else 0 end) May, sum(case strftime('%m', fecha) when '06' then importe else 0 end) Jun, sum(case strftime('%m', fecha) when '07' then importe else 0 end) Jul, sum(case strftime('%m', fecha) when '08' then importe else 0 end) Ago, sum(case strftime('%m', fecha) when '09' then importe else 0 end) Sep, sum(case strftime('%m', fecha) when '10' then importe else 0 end) Oct, sum(case strftime('%m', fecha) when '11' then importe else 0 end) Nov, sum(case strftime('%m', fecha) when '12' then importe else 0 end) Dic from importes group by YEAR order by YEAR
Lo he probado desde SQLite Manager y funciona.
De verdad que estaba perdido, pensaba que tendría que hacer vaias consultas para obtener todos los datos.
Muchísimas gracias. Un saludo