Montar SQL por mes agrupado

08/08/2008

1

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.


Responder

Posts

08/08/2008

Leufmt

Select Vencto, Sum(Valor) from PAGAMENTOS
Group by Vencto


Responder

08/08/2008

Webjoel

Olá!

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.


Responder

08/08/2008

Walter Faria

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


Responder
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



Responder

08/08/2008

Walter Faria

entao, tentei executar esta SQL mas esta dando erro no EXTRACT

token tonknow - line 2, char 8 EXTRACT

oq pode ser?


Responder
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

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



Responder
Achei que poderia ser no código em vermelho
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.


Responder

08/08/2008

Webjoel

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



Responder
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
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 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.


Responder

09/08/2008

Webjoel

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!


Responder
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


Responder

10/08/2008

Walter Faria

Entao, utilizo interbase e delphi 7 e nao consigo deixar query funcionando. da mesmo erro.

se alguem puder me ajudar, fico grato


Responder
[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.


Responder
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



Responder