Consulta SQL colunas meses

831 views
Skip to first unread message

Samuel M. Basso

unread,
Dec 23, 2010, 1:19:01 PM12/23/10
to delphi...@googlegroups.com, dug...@googlegroups.com
Olá.


Gostaria de fazer se existe uma forma de fazer uma consulta SQL onde me retorna os totais de valores separados por mes, sendo que os meses fiquem em colunas:

Segue um exemplo:

CATEGORIA  -  JANEIRO  -  FEV  -  MAR  -  ABR  -  MAI  -  JUN  -  JUL  -  AGO  -  SET  -  OUT  -  NOV  -  DEZ
Categoria 1         200            100       50         39        50       10
Categoria 2         300             50        85        200



Poderia utilizar para varias consultas exemplo, o que um cliente comprou de mim mes a mes, em uma unica tela vejo isso.

Alguem tem uma dica de como fazer?

Desde já agradeço e boas festas.

--
Atenciosamente,

Samuel M. Basso
Fone: (54) 3462-5522
Cel: (54) 8135-3723
Skype: samuelbasso
E-mail/MSN: samue...@gmail.com
Web site: www.otimizy.com.br

Samuel N. Junior

unread,
Dec 23, 2010, 1:37:50 PM12/23/10
to dug...@googlegroups.com
Boa tarde Samuel,

Sim, é possível, tudo depende dos comandos disponíveis na linguagem SQL do banco de dados que você utiliza.

No banco de dados que eu uso (NexusDB) o SQL seria o seguinte:

SELECT CATEGORIA, SUM(CASE WHEN MES = 1 THEN VALOR ELSE 0 END) JANEIRO,
                                   SUM(CASE WHEN MES = 2 THEN VALOR ELSE 0 END) FEVEREIRO,
                                   SUM(CASE WHEN MES = 3 THEN VALOR ELSE 0 END) MARCO,
                                   SUM(CASE WHEN MES = 4 THEN VALOR ELSE 0 END) ABRIL,
                                   SUM(CASE WHEN MES = 5 THEN VALOR ELSE 0 END) MAIO,
                                   SUM(CASE WHEN MES = 6 THEN VALOR ELSE 0 END) JUNHO,
                                   SUM(CASE WHEN MES = 7 THEN VALOR ELSE 0 END) JULHO,
                                   SUM(CASE WHEN MES = 8 THEN VALOR ELSE 0 END) AGOSTO,
                                   SUM(CASE WHEN MES = 9 THEN VALOR ELSE 0 END) SETEMBRO,
                                   SUM(CASE WHEN MES = 10 THEN VALOR ELSE 0 END) OUTUBRO,
                                   SUM(CASE WHEN MES = 11 THEN VALOR ELSE 0 END) NOVEMBRO,
                                   SUM(CASE WHEN MES = 12 THEN VALOR ELSE 0 END) DEZEMBRO
FROM TABELA
GROUP BY CATEGORIA

No Oracle você poderia substituir o CASE pelo comando DECODE:

SELECT CATEGORIA, SUM(DECODE(MES,1,VALOR,0)) JANEIRO,
                                   SUM(DECODE(MES,2,VALOR,0)) FEVEREIRO,
                                        :
                                        :
                                  
SUM(DECODE(MES,12,VALOR,0)) DEZEMBRO
FROM TABELA
GROUP BY CATEGORIA

Me diga se era isso que você queria saber.

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Skype: Hipercusto
www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.


www.tr7.com.br o seu site de buscas na web

--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
Twitter: @dugrs

Samuel M. Basso

unread,
Dec 24, 2010, 6:05:10 AM12/24/10
to dug...@googlegroups.com
Bom dia. Minha base de dados é Firibird e funcionou perfeitamente show de bola. Espero que essas funçoes nao fiquem lenta só isso. Muito obrigado Samuel. Vou postar abaixo como ficou o SQL para quem precisar. Abraços e bom natal e fim de ano.

SELECT C.DESCR, SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI) = 1 THEN CP.VLR ELSE 0 END) JANEIRO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 2 THEN CP.VLR ELSE 0 END) FEVEREIRO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 3 THEN CP.VLR ELSE 0 END) MARCO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 4 THEN CP.VLR ELSE 0 END) ABRIL,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 5 THEN CP.VLR ELSE 0 END) MAIO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 6 THEN CP.VLR ELSE 0 END) JUNHO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 7 THEN CP.VLR ELSE 0 END) JULHO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 8 THEN CP.VLR ELSE 0 END) AGOSTO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 9 THEN CP.VLR ELSE 0 END) SETEMBRO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 10 THEN CP.VLR ELSE 0 END) OUTUBRO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 11 THEN CP.VLR ELSE 0 END) NOVEMBRO,
                                   SUM(CASE WHEN EXTRACT(MONTH FROM CP.DATA_EMI)  = 12 THEN CP.VLR ELSE 0 END) DEZEMBRO
FROM CONTA_PAG CP
LEFT JOIN CATEGORIA C ON C.COD_CAT = CP.COD_CAT


GROUP BY 1

2010/12/23 Samuel N. Junior <sam...@natsam.com.br>
Reply all
Reply to author
Forward
0 new messages