Jump to content
Sign in to follow this  
asacap1000

Select agrupando por mes e ano

Recommended Posts

Olá Galera salve salve!!

Estou desenvolvendo um relatório de movimentação por cliente divididos por mês e ano. porém eu gostaria que o select não tivesse datas fixas como está agora. Como que eu posso fazer para que na consulta o usuário digitasse por exemplo 2010 a 2016 e ele gerasse neste período. Hoje como pode ver no select ele está limitado as datas que coloco.

select distinct contagem.id_klient,
                contagem.cnpj_cpf,
                contagem.name,
                contagem.cidade,
                contagem.moeda,
                Sum(case
                      when contagem.MES_ANO = '01/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "01/2014",
                Sum(case
                      when contagem.MES_ANO = '02/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "02/2014",
                Sum(case
                      when contagem.MES_ANO = '03/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "03/2014",
                Sum(case
                      when contagem.MES_ANO = '04/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "04/2014",
                Sum(case
                      when contagem.MES_ANO = '05/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "05/2014",
                Sum(case
                      when contagem.MES_ANO = '06/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "06/2014",
                Sum(case
                      when contagem.MES_ANO = '07/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "07/2014",
                Sum(case
                      when contagem.MES_ANO = '08/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "08/2014",
                Sum(case
                      when contagem.MES_ANO = '09/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "09/2014",
                Sum(case
                      when contagem.MES_ANO = '10/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "10/2014",
                Sum(case
                      when contagem.MES_ANO = '11/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "11/2014",
                Sum(case
                      when contagem.MES_ANO = '12/2014' then
                       contagem.valor_rec
                      else
                       0
                    end) as "12/2014",
                Sum(case
                      when contagem.MES_ANO = '01/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "01/2015",
                Sum(case
                      when contagem.MES_ANO = '02/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "02/2015",
                Sum(case
                      when contagem.MES_ANO = '03/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "03/2015",
                Sum(case
                      when contagem.MES_ANO = '04/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "04/2015",
                Sum(case
                      when contagem.MES_ANO = '05/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "05/2015",
                Sum(case
                      when contagem.MES_ANO = '06/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "06/2015",
                Sum(case
                      when contagem.MES_ANO = '07/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "07/2015",
                Sum(case
                      when contagem.MES_ANO = '08/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "08/2015",
                Sum(case
                      when contagem.MES_ANO = '09/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "09/2015",
                Sum(case
                      when contagem.MES_ANO = '10/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "10/2015",
                Sum(case
                      when contagem.MES_ANO = '11/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "11/2015",
                Sum(case
                      when contagem.MES_ANO = '12/2015' then
                       contagem.valor_rec
                      else
                       0
                    end) as "12/2015",
                Sum(case
                      when contagem.MES_ANO = '01/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "01/2016",
                Sum(case
                      when contagem.MES_ANO = '02/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "02/2016",
                Sum(case
                      when contagem.MES_ANO = '03/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "03/2016",
                Sum(case
                      when contagem.MES_ANO = '04/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "04/2016",
                Sum(case
                      when contagem.MES_ANO = '05/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "05/2016",
                Sum(case
                      when contagem.MES_ANO = '06/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "06/2016",
                Sum(case
                      when contagem.MES_ANO = '07/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "07/2016",
                Sum(case
                      when contagem.MES_ANO = '08/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "08/2016",
                Sum(case
                      when contagem.MES_ANO = '09/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "09/2016",
                Sum(case
                      when contagem.MES_ANO = '10/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "10/2016",
                Sum(case
                      when contagem.MES_ANO = '11/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "11/2016",
                Sum(case
                      when contagem.MES_ANO = '12/2016' then
                       contagem.valor_rec
                      else
                       0
                    end) as "12/2016"

  from (SELECT w.id_klient,
               decode(length(w.suchbegriff),
                      14,
                      substr(w.suchbegriff, 1, 2) || '.' ||
                      substr(w.suchbegriff, 3, 3) || '.' ||
                      substr(w.suchbegriff, 6, 3) || '/' ||
                      substr(w.suchbegriff, 9, 4) || '-' ||
                      substr(w.suchbegriff, 13, 2),
                      substr(w.suchbegriff, 1, 3) || '.' ||
                      substr(w.suchbegriff, 4, 3) || '.' ||
                      substr(w.suchbegriff, 7, 3) || '-' ||
                      substr(w.suchbegriff, 10, 2)) cnpj_cpf,
               w.name,
               w.cidade,
               W.MOEDA,
               (sum(w.valor_cif)) valor_rec,
               to_char(w.data_base, 'MM/RRRR') MES_ANO
          FROM (SELECT k.id_klient,
                       k.name,
                       k.suchbegriff,
                       a.bruecke_1 LOTE,
                       a.einh_waehr moeda,
                       cyt.description cidade,
                       MAX(a.valor_cif) valor_cif,
                       MIN(we.datum_we) data_base
                  FROM we,
                       anliefpos         a,
                       klienten          k,
                       adressen          ad,
                       CITY_REGISTRATION CYT
                 WHERE we.lager = a.lager
                   and k.id_klient = a.id_klient
                   and k.id_klient = we.id_klient
                   and cyt.id_city = ad.ort
                   and k.id_klient = ad.id_eigner_2
                   and k.name = ad.name_2
                   AND we.nr_anlief = a.nr_anlief
                   AND we.nr_anlief_pos = a.nr_anlief_pos
                   AND a.stat <> 80
                   AND a.bruecke_1 like 'A%' --importação
                 GROUP BY a.lager,
                          a.bruecke_1,
                          k.name,
                          k.suchbegriff,
                          k.id_klient,
                          cyt.description,
                          a.einh_waehr) w
         WHERE w.data_base >= to_date('01/01/2014', 'dd/mm/yyyy')
           and w.data_base <= to_date('30/12/2016', 'dd/mm/yyyy')
         GROUP BY w.id_klient,
                  w.cidade,
                  to_char(w.data_base, 'MM/RRRR'),
                  w.name,
                  decode(length(w.suchbegriff),
                         14,
                         substr(w.suchbegriff, 1, 2) || '.' ||
                         substr(w.suchbegriff, 3, 3) || '.' ||
                         substr(w.suchbegriff, 6, 3) || '/' ||
                         substr(w.suchbegriff, 9, 4) || '-' ||
                         substr(w.suchbegriff, 13, 2),
                         substr(w.suchbegriff, 1, 3) || '.' ||
                         substr(w.suchbegriff, 4, 3) || '.' ||
                         substr(w.suchbegriff, 7, 3) || '-' ||
                         substr(w.suchbegriff, 10, 2)),
                  W.MOEDA) contagem
 group by contagem.cnpj_cpf,
          contagem.id_klient,
          contagem.name,
          contagem.cidade,
          contagem.moeda
 order by contagem.name asc

Share this post


Link to post
Share on other sites

Exemplo de pesquisa por datas entre periodos

SELECT * FROM movimentacao WHERE data BETWEEN '2010' AND '2016' GROUP BY YEAR(data)

Nesse select eu pesquiso na tabela movimentação onde (WHERE) a coluna data estiver entre (BETWEEN) 2010 e 2016 agrupados por ano (GROUP BY YEAR) da coluna data

Desta forma a pesquisa vai agrupar todos os resultados por ano entre o periodo especificado.

Se não houver registro nesse periodo, a pesquisa retorna NULL

  • +1 1

Share this post


Link to post
Share on other sites

No Front-end como o relatório é montado ?

Em teste o SQL poderia ser dinâmico e ser executado via EXECUTE IMMEDIATE mas as colunas dinâmicas seriam um problema.

Softwares como Crystal Reports permitem montar esta referencia.

  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By RX3Info
      Boa Tarde!
      Pessoal,
      Estou precisando realizar um cálculo dentro de uma select, mas não estou conseguindo, segue abaixo a select sem as operações e um exemplo (que não funcionou) logo abaixo:
       
      Este código está funcionando:
      select A.CODPRODUTO, A.LOTE, A.QTD, A.`LOCAL`, A.OT, A.ALTUSU, A.ALTMOM, B.CODPRODUTO, B.DESCRICAO, B.CUSTO, C.ICMS_VALOR, C.IPI_VALOR, C.COFINS_VALOR, C.QTD from proqtd as A inner join produto as B on a.CODPRODUTO = B.CODPRODUTO inner join nfeprodu as C on B.CODPRODUTO = C.PRODUTO  
      Este não funciona e da erro devido ao cálculo.
      select A.CODPRODUTO, A.LOTE, A.QTD, A.`LOCAL`, A.OT, A.ALTUSU, A.ALTMOM, B.CODPRODUTO, B.DESCRICAO, (B.CUSTO, - C.ICMS_VALOR, - C.IPI_VALOR, - C.COFINS_VALOR, / C.QTD) as CustoSemImpostos from proqtd as A inner join produto as B on a.CODPRODUTO = B.CODPRODUTO inner join nfeprodu as C on B.CODPRODUTO = C.PRODUTO  
      O que eu preciso é o seguinte, que me traga os itens com os valores sem os impostos, veja acima que a tentativa está sendo de pegar o valor de custo de um item, subtrair os impostos e dividir pela quantidade em estoque, desta forma, tenho o valor da unidade de cada item sem os impostos, mas não estou conseguindo.
       
      Se alguém puder me ajudar com um exemplo, ficarei muito agradecido.
      Obrigado!
       
    • By iguulima
      É possivel realizar uma consulta SQL em duas colunas da mesma tabela usando outra função que não seja o AND ou OR? Segue o meu Select ate agora:
       
      (SELECT * FROM product WHERE comid = $idcom AND status = 'Ativo' AND categ = $category AND nameprod like'%$search%'  ORDER BY id DESC)  
      Por exemplo se eu colocar um AND após buscar o nameprod, no nome do produto não tiver a palavra chave ele também não irá buscar. Ou se colocar um OR ele anulo as outras condições até onde eu sei.
      Iniciante em programação.
    • By lezão
      Boa noite!
      Td bem com vcs?
      Estou usando esse código mas não retorna nada!
       
      Alguém pode me ajudar ?
       
       
      <?php $sql = mysqli_query($link, "SELECT ver_post, COUNT(ver_post) AS Quantidade FROM tab_comentarios where ver_post = 'red' Group by ver_post"); ?> Variável
      <?php echo $Quantidade; ?>  
    • By MarcosAntonio
      Boa tarde !
      estou carregando um arquivo texto numa variável BLOB e preciso manipular em loop, para ler linha a linha e aplicar os SUBSTRs para inserir no banco, mas não sei como fazer o loop, a interação entre as linhas e quando saber o momento de sair do loop, alguém pode me ajudar?

      ex do conteúdo do BLOB:
       
      2AAA02012021123421
      2AAA02012021213453
      2AAA02012021105413
       
      quero por exemplo retirar a informação da linha 2 a partir do quarto caracter e parando no decimo segundo caracteres
    • By Motta
      Oracle is moving its headquarters from Silicon Valley to Austin, Texas
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.