Montar SQL por mes agrupado
Boa noite , gostaria de uma dica como posso montar minha SQL onde irei mostrar num grid da seguinte maneira:
MES VALOR
JANEIRO 1000,00
FEVEREIRO 500,00
JULHO 250,00
Como posso montar uma sql q AGRUPA e totaliza o valor de uma tabela .
tabela de PAGAMENTOS ( Codigo, Vencto, Valor )
Utilizo D7, Interbase.
desde ja agradeco.
MES VALOR
JANEIRO 1000,00
FEVEREIRO 500,00
JULHO 250,00
Como posso montar uma sql q AGRUPA e totaliza o valor de uma tabela .
tabela de PAGAMENTOS ( Codigo, Vencto, Valor )
Utilizo D7, Interbase.
desde ja agradeco.
Walter Faria
Curtidas 0
Respostas
Leufmt
08/08/2008
Select Vencto, Sum(Valor) from PAGAMENTOS
Group by Vencto
Group by Vencto
GOSTEI 0
Webjoel
08/08/2008
Olá!
Segue o SQL:
Dependendo do seu objetivo, seria importamte agrupar também pelo ano, extraindo o year da dt_vencimento também, e agrupando pelos dois.
Segue o SQL:
SELECT EXTRACT(MONTH FROM DT_VENCIMENTO) AS MES, SUM(VALOR) AS TOTAL_MES FROM PAGAMENTOS GROUP BY MES;
Dependendo do seu objetivo, seria importamte agrupar também pelo ano, extraindo o year da dt_vencimento também, e agrupando pelos dois.
GOSTEI 0
Walter Faria
08/08/2008
Entao, ficou desta forma, deste jeito :
Select EXTRACT(MONTH FROM DataVencimento) as MES, Sum(Valor) as Valor from CHEQUE
Group by DataVencimento
MES VALOR
2 1000,00
5 500,00
queria q ficasse assim , tem como ?
MES VALOR
fevereiro 1000,00
maio 500,00
Select EXTRACT(MONTH FROM DataVencimento) as MES, Sum(Valor) as Valor from CHEQUE
Group by DataVencimento
MES VALOR
2 1000,00
5 500,00
queria q ficasse assim , tem como ?
MES VALOR
fevereiro 1000,00
maio 500,00
GOSTEI 0
Vitor Alcantara
08/08/2008
Select CASE EXTRACT(MONTH FROM DataVencimento) WHEN 1 THEN ´JANEIRO´ WHEN 2 THEN ´FERVEREIRO´ WHEN 3 THEN ´MARÇO´ WHEN 4 THEN ´ABRIL´ WHEN 5 THEN ´MAIO´ WHEN 6 THEN ´JUNHO´ WHEN 7 THEN ´JULHO´ WHEN 8 THEN ´AGOSTO´ WHEN 9 THEN ´SETEMBRO´ WHEN 10 THEN ´AGOSTO´ WHEN 11 THEN ´NOVEMBRO´ WHEN 12 THEN ´DEZEMBRO´ END as MES, Sum(Valor) as Valor from CHEQUE Group by DataVencimento
GOSTEI 0
Walter Faria
08/08/2008
entao, tentei executar esta SQL mas esta dando erro no EXTRACT
token tonknow - line 2, char 8 EXTRACT
oq pode ser?
token tonknow - line 2, char 8 EXTRACT
oq pode ser?
GOSTEI 0
Adriano_servitec
08/08/2008
No firebird 2.0 funciona, mas tenho uma duvida também no Order By
gostaria de saber como faço um order by neste select aqui, para ordernar por mes
[color=red:123e0677b1]
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Dumped 72678736 pages of a total 40538700 database pages.[/color:123e0677b1]
Assim funciona
gostaria de saber como faço um order by neste select aqui, para ordernar por mes
Select CASE EXTRACT(MONTH FROM mes) WHEN 1 THEN ´JANEIRO´ WHEN 2 THEN ´FERVEREIRO´ WHEN 3 THEN ´MARÇO´ WHEN 4 THEN ´ABRIL´ WHEN 5 THEN ´MAIO´ WHEN 6 THEN ´JUNHO´ WHEN 7 THEN ´JULHO´ WHEN 8 THEN ´AGOSTO´ WHEN 9 THEN ´SETEMBRO´ WHEN 10 THEN ´AGOSTO´ WHEN 11 THEN ´NOVEMBRO´ WHEN 12 THEN ´DEZEMBRO´ END as MES, Sum(Valor) as Valor from new_table group by 1 order by extract(month from mes) desc
[color=red:123e0677b1]
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Dumped 72678736 pages of a total 40538700 database pages.[/color:123e0677b1]
Assim funciona
select extract(month from mes), sum(valor) as valor from new_table group by 1 order by extract(month from mes) desc
GOSTEI 0
Adriano_servitec
08/08/2008
Achei que poderia ser no código em vermelho
Mais arrumei, e coloquei o certo e não é ai não o problema.
Select
CASE EXTRACT(MONTH FROM mes)
WHEN 1 THEN ´JANEIRO´
WHEN 2 THEN ´FERVEREIRO´
WHEN 3 THEN ´MARÇO´
WHEN 4 THEN ´ABRIL´
WHEN 5 THEN ´MAIO´
WHEN 6 THEN ´JUNHO´
WHEN 7 THEN ´JULHO´
WHEN 8 THEN ´AGOSTO´
WHEN 9 THEN ´SETEMBRO´
[color=red:d1aa216a7c] WHEN 10 THEN ´AGOSTO´[/color:d1aa216a7c]
WHEN 11 THEN ´NOVEMBRO´
WHEN 12 THEN ´DEZEMBRO´
END as MES, Sum(Valor) as Valor
from new_table
group by 1
order by extract(month from mes) desc
Mais arrumei, e coloquei o certo e não é ai não o problema.
GOSTEI 0
Webjoel
08/08/2008
Olá!
Select EXTRACT(MONTH FROM T.DT_VENCIMENTO) AS NR_MES, CASE EXTRACT(MONTH FROM T.DT_VENCIMENTO) WHEN 1 THEN ´JANEIRO´ WHEN 2 THEN ´FERVEREIRO´ WHEN 3 THEN ´MARÇO´ WHEN 4 THEN ´ABRIL´ WHEN 5 THEN ´MAIO´ WHEN 6 THEN ´JUNHO´ WHEN 7 THEN ´JULHO´ WHEN 8 THEN ´AGOSTO´ WHEN 9 THEN ´SETEMBRO´ WHEN 10 THEN ´AGOSTO´ WHEN 11 THEN ´NOVEMBRO´ WHEN 12 THEN ´DEZEMBRO´ END AS MES, SUM(T.VALOR) as VALOR from TABELA T group by 1,2 order by 1
GOSTEI 0
Adriano_servitec
08/08/2008
Olá!
Valeu pela dica amigo, olhando o teu select vi que neste caso os meses em formato de numeros também entrariam no select, mais posso resolver isso mostranto apenas os campos necessários eliminando este campo [b:01dfb0e7e3]NR_MES[/b:01dfb0e7e3]Select EXTRACT(MONTH FROM T.DT_VENCIMENTO) AS NR_MES, CASE EXTRACT(MONTH FROM T.DT_VENCIMENTO) WHEN 1 THEN ´JANEIRO´ WHEN 2 THEN ´FERVEREIRO´ WHEN 3 THEN ´MARÇO´ WHEN 4 THEN ´ABRIL´ WHEN 5 THEN ´MAIO´ WHEN 6 THEN ´JUNHO´ WHEN 7 THEN ´JULHO´ WHEN 8 THEN ´AGOSTO´ WHEN 9 THEN ´SETEMBRO´ WHEN 10 THEN ´AGOSTO´ WHEN 11 THEN ´NOVEMBRO´ WHEN 12 THEN ´DEZEMBRO´ END AS MES, SUM(T.VALOR) as VALOR from TABELA T group by 1,2 order by 1
Select EXTRACT(MONTH FROM mes) AS NR_MES, CASE EXTRACT(MONTH FROM mes) WHEN 1 THEN ´JANEIRO´ WHEN 2 THEN ´FERVEREIRO´ WHEN 3 THEN ´MARÇO´ WHEN 4 THEN ´ABRIL´ WHEN 5 THEN ´MAIO´ WHEN 6 THEN ´JUNHO´ WHEN 7 THEN ´JULHO´ WHEN 8 THEN ´AGOSTO´ WHEN 9 THEN ´SETEMBRO´ WHEN 10 THEN ´OUTUBRO´ WHEN 11 THEN ´NOVEMBRO´ WHEN 12 THEN ´DEZEMBRO´ END AS MES, SUM(VALOR) as VALOR from new_table group by 1,2 order by 1 desc
Obrigado.
GOSTEI 0
Webjoel
08/08/2008
Pois é, coloquei o campo ´NR_MES´, para o select retornar a ordem correta dos meses, Janeiro, Fevereiro, Março...,
Então, lá onde você vai mostrar o resultado é só ignorar este primeiro campo mesmo.
Boas compilações!
Então, lá onde você vai mostrar o resultado é só ignorar este primeiro campo mesmo.
Boas compilações!
GOSTEI 0
Adriano_servitec
08/08/2008
Pois é, coloquei o campo ´NR_MES´, para o select retornar a ordem correta dos meses, Janeiro, Fevereiro, Março...,
Então, lá onde você vai mostrar o resultado é só ignorar este primeiro campo mesmo.
Boas compilações!
Pelo visto diretamente não tem jeito mesmo, mais tá bom assim mesmo.Obrigado amigo
GOSTEI 0
Walter Faria
08/08/2008
Entao, utilizo interbase e delphi 7 e nao consigo deixar query funcionando. da mesmo erro.
se alguem puder me ajudar, fico grato
se alguem puder me ajudar, fico grato
GOSTEI 0
Adriano_servitec
08/08/2008
[quote:1c00802b4d=´Walter Faria´]Entao, utilizo interbase e delphi 7 e nao consigo deixar query funcionando. da mesmo erro.
se alguem puder me ajudar, fico grato[/quote:1c00802b4d]Acho que o erro ai é porque a função CASE foi implementada a partir InterBase 7.5.
Se vc estiver usando uma versão inferior o CASE não vai funcionar, mais também não sei como fazer, pois não utilizo o interbase.
se alguem puder me ajudar, fico grato[/quote:1c00802b4d]Acho que o erro ai é porque a função CASE foi implementada a partir InterBase 7.5.
Se vc estiver usando uma versão inferior o CASE não vai funcionar, mais também não sei como fazer, pois não utilizo o interbase.
GOSTEI 0
Adriano_servitec
08/08/2008
Observando aqui, vi que também a necessidade de incluir o ano no select, para não fazer uma soma errada, tipo acumular por anos diferentes.
Select EXTRACT(MONTH FROM mes) AS NR_MES, Extract(year from mes) as NR_Ano, CASE EXTRACT(MONTH FROM mes) WHEN 1 THEN ´JANEIRO´ WHEN 2 THEN ´FERVEREIRO´ WHEN 3 THEN ´MARÇO´ WHEN 4 THEN ´ABRIL´ WHEN 5 THEN ´MAIO´ WHEN 6 THEN ´JUNHO´ WHEN 7 THEN ´JULHO´ WHEN 8 THEN ´AGOSTO´ WHEN 9 THEN ´SETEMBRO´ WHEN 10 THEN ´OUTUBRO´ WHEN 11 THEN ´NOVEMBRO´ WHEN 12 THEN ´DEZEMBRO´ END AS MES, SUM(VALOR) as VALOR from new_table group by 1,2,3 order by 1,2
GOSTEI 0