select agrupando por mes e ano

05/10/2013

0

bom dia galera..
preciso de uma ajuda, montar um select do total de vendas agrupado por cliente, produto mes e ano.
resultado teria que ser assim por ex

cliente produto ano qtde jan r$ jan qtde fev r$ fev .... qtde dez r$ dez
201 20 2012 12 300,00 14 340,00 .... 0 0
201 20 2013 7 180,00 2 40,00 .... 0 0
201 57 2012 7 180,00 2 40,00 .... 0 0

e por ai vai.

meu problema não são os extracts por data e mes, mais sim aparecer um mes na frente do outro como preciso acima.

se alguem tiver uma dica agradeço


abraços
Rafael Cruz

Rafael Cruz

Responder

Post mais votado

05/10/2013

Seria algo mais ou menos assim:
Select sum(TotalVendas) TotalVendas,
       cd_cliente,
       cd_produto,
       extract(month from current_date) mes, /*Trocar o current_date pelo seu campo*/
       extract(month from current_date) ano

  from tabelas
  group by
       cd_cliente,
       cd_produto,
       extract(month from current_date), /*Trocar o current_date pelo seu campo*/
       extract(month from current_date)


Outros exemplos de manipulação de Data e Hora
select
      current_date Data,
      extract(year from current_date) ano,
      extract(month from current_date) mes,
      extract(day from current_date) dia,
      extract(hour from current_time) Hora,
      extract(Minute from current_time) Minutos,
      extract(Second from current_time) Segundos
   from RDB$Database


Abração e bons códigos!!!

Deivison Melo

Deivison Melo
Responder

Mais Posts

05/10/2013

Rafael Cruz

salve Deivison,

essa idéia é o que estou usando já, mais não é o resultado que estou procurando, como citei no exemplo preciso da soma por mes mais que cada mes aparecesse um na frente do outro


mais valeu pela ajuda amigo

Responder

05/10/2013

Deivison Melo

Detalha melhor para que possa ajudar vc da melhor forma possível!
Responder

17/10/2013

Thiago Irrazabal

Não sei se tu ainda está precisando mas, eu fiz aqui um exemplo com algumas tabelas que eu tenho talvez te ajude.

SELECT
  B.FANTASIA AS NOME_CLIENTE, D.CODIGO AS CODIGO_PRODUTO,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 1, C.VTOT, 0) AS VALOR_JAN, IIF(EXTRACT(MONTH FROM A.DEMI) = 1, C.QTD, 0) AS QTD_JAN,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 2, C.VTOT, 0) AS VALOR_FEV, IIF(EXTRACT(MONTH FROM A.DEMI) = 2, C.QTD, 0) AS QTD_FEV,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 3, C.VTOT, 0) AS VALOR_MAR, IIF(EXTRACT(MONTH FROM A.DEMI) = 3, C.QTD, 0) AS QTD_MAR,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 4, C.VTOT, 0) AS VALOR_ABR, IIF(EXTRACT(MONTH FROM A.DEMI) = 4, C.QTD, 0) AS QTD_ABR,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 5, C.VTOT, 0) AS VALOR_MAI, IIF(EXTRACT(MONTH FROM A.DEMI) = 5, C.QTD, 0) AS QTD_MAI,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 6, C.VTOT, 0) AS VALOR_JUN, IIF(EXTRACT(MONTH FROM A.DEMI) = 6, C.QTD, 0) AS QTD_JUN,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 7, C.VTOT, 0) AS VALOR_JUL, IIF(EXTRACT(MONTH FROM A.DEMI) = 7, C.QTD, 0) AS QTD_JUL,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 8, C.VTOT, 0) AS VALOR_AGO, IIF(EXTRACT(MONTH FROM A.DEMI) = 8, C.QTD, 0) AS QTD_AGO,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 9, C.VTOT, 0) AS VALOR_SET, IIF(EXTRACT(MONTH FROM A.DEMI) = 9, C.QTD, 0) AS QTD_SET,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 10, C.VTOT, 0) AS VALOR_OUT, IIF(EXTRACT(MONTH FROM A.DEMI) = 10, C.QTD, 0) AS QTD_OUT,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 11, C.VTOT, 0) AS VALOR_NOV, IIF(EXTRACT(MONTH FROM A.DEMI) = 11, C.QTD, 0) AS QTD_NOV,
  IIF(EXTRACT(MONTH FROM A.DEMI) = 12, C.VTOT, 0) AS VALOR_DEZ, IIF(EXTRACT(MONTH FROM A.DEMI) = 12, C.QTD, 0) AS QTD_DEZ
FROM FATNOT A
  INNER JOIN CAD_COLABORADOR B ON B.CODIGO = A.COL
  INNER JOIN FATNOTITEM C ON C.COD = A.COD
  INNER JOIN CAD_PRODUTO D ON D.CODIGO = C.CPRO
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26



Att,
Thiago Irrazabal de Oliveira.
Responder

17/10/2013

Rafael Cruz

bom dia a todos


resolvi meu problema totalizando cada mês num loop e informando no clientdataset dentro de cada mês e ano correspondente, já que preciso das informações dos últimos 24 meses, mais vou fazer os testes usando sua ideia Thiago depois retorno.


Obrigado e bons códigos a todos
Responder

17/10/2013

Deivison Melo


Além do IIF:
   select iif( c.CONTACT_FIRST = 'Elizabeth', 'EMANOEL', 'DEIVISON' ) VALOR
    from Customer c
   


Você pode usar o Decode:
   select decode( c.CONTACT_FIRST, 'Elizabeth', 'EMANOEL', 'DEIVISON' ) VALOR
    from Customer c
   


Eu prefiro o Decode, mas o importante é que o resultado final seja obtido
de forma satisfatória (seja usando IFF, Decode, CASE ou até mesmo uma
lógica, o importante é observar a performance de cada um dos comandos.

Abração e bons códigos!!
Responder

17/11/2017

Reginaldo Souza

Bom dia amigos, desculpem mas precisei ressuscitar esse tópico para tirar uma duvida espero que os amigos me ajudem....

com a ajuda que deram ao amigo acima criador do tópico consegui consolidar minha consulta por meses. até ai show de bola porem agora na coluna dos meses gostaria de renomear eles para que 01 ficasse como janeiro, 02 ficasse como fevereiro, e assim por diante...

fiz o seguinte código:
select distinct
      a.nomemed MEDICO,
       extract(month from b.dtentr) mes,
        extract(year from b.dtentr) ano,
         d.nomefun PROPAGANDISTA,
          COUNT(case b.qtaprov when 0 then '1' END) AS REJEITADOS,
           COUNT(case b.qtaprov when 1 then '1' END) AS APROVADOS,
             sum (case b.qtaprov when 0 then (b.prcobr - b.vrdsc) END) as VALOR_REJEITADO,
             sum (case b.qtaprov when 1 then (b.prcobr - b.vrdsc) END) as VALOR_APROVADO,
              COUNT(B.nrorc) AS TOTAL_ORCAMENTOS

                from
                        fc04000 a,
                        fc15100 b,
                        fc04200 c,
                        fc08000 d
                
            
                    where   c.cdcon = d.cdcon and
                            c.cdfun = d.cdfun and
                            a.pfcrm = c.pfcrm and
                            a.ufcrm = c.ufcrm and
                            a.nrcrm = c.nrcrm and

                            a.pfcrm = B.pfcrm and
                                a.ufcrm = b.ufcrm and
                                 a.nrcrm = b.nrcrm and
                                    b.dtentr between :DtInicial and :DtFinal and
                                       b.cdfil=75
                                            group by a.nomemed,D.nomefun,extract(month from b.dtentr),extract(year from b.dtentr)
                                             order by nomemed ,extract(year from b.dtentr)

no aguardo de uma boa alma pra me dar essa força....
Responder

11/01/2018

Evaldo

Amigo precisei fazer algo parecido e com base nos colegas acima fiz o meu assim

SELECT
C.CODP AS CODIGO, C.DESCRICAO AS DESC_PRODUTO,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 1, C.QTDE, 0)) AS QTDE_JAN,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 2, C.QTDE, 0)) AS QTDE_FEV,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 3, C.QTDE, 0)) AS QTDE_MAR,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 4, C.QTDE, 0)) AS QTDE_ABR,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 5, C.QTDE, 0)) AS QTDE_MAI,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 6, C.QTDE, 0)) AS QTDE_JUN,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 7, C.QTDE, 0)) AS QTDE_JUL,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 8, C.QTDE, 0)) AS QTDE_AGO,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 9, C.QTDE, 0)) AS QTDE_SET,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 10, C.QTDE, 0)) AS QTDE_OUT,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 11, C.QTDE, 0)) AS QTDE_NOV,
SUM(IIF(EXTRACT(MONTH FROM A.DATAENTREGA) = 12, C.QTDE, 0)) AS QTDE_DEZ

FROM LANCNF1 A
INNER JOIN LANCNF2 C ON C.NLANC = A.NLANC
INNER JOIN PRODUTO P ON P.CODIGO=C.CODP
INNER JOIN TABCFOP F ON F.CODFISCAL=C.CFOP

WHERE a.DATAENTREGA between '01.01.2017' and '31.12.2017' AND F.ATUALIZAR_ESTOQUE= 'True'
AND P.CODFOR = 165 AND A.entrada_saida = 'E'
GROUP BY 1,2
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar