Ir para conteúdo
Entre para seguir isso  
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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por MateusDuarte
      Podem me ajudar? Sou novato em PHP e estou precisando de uma ajudinha.
      Tenho 2 tabelas no banco: filmes e generos.
      Faço o cadastro individual de todos os generos na tabela generos, e no cadastro de filmes eu puxo todos os generos por um multiple select. Até ai tudo certo, ele salva no banco de dados assim:
      genero1, genero2, genero3.
       
      Porém na hora de mostrar eu não sei separar eles das virgulas.
      Segue meu SELECT simples:
      <main class="content"> <?php $sql = "SELECT * FROM genero ORDER BY RAND()"; $result = $connect->query($sql); if($result->num_rows > 0) { while($row = $result->fetch_assoc()) { $teste = $row["id_genero"]; ?> <section class="panel"> <h2><a id="links-generos" href="generos-filmes.php?id=<?php echo $row['id_genero'];?>"><?php echo $row["descricao"];?></a></h2> <div class="recentslider"> <div class="swiper-container"> <div class="swiper-wrapper"> <?php $sql_t = "SELECT * FROM filmes WHERE id_genero = ".$teste." ORDER BY RAND()"; $result_t = $connect->query($sql_t); if($result_t->num_rows > 0) { while($row_t = $result_t->fetch_assoc()) { ?> <div class="swiper-slide"><?php echo "<a href='single-filmes.php?id=".$row_t['id_filme']."&genero=".$row_t['id_genero']."';>";?><img src="capa/<?php echo $row_t["capa_filme"];?>"><h3 class="hometitle"><?php echo $row_t["titulo_filme"];?></h3></a></div> <?php }} else { echo "0 results"; } ?> </div> <div class="nextdirection recent-next"><img src="img/right-arrow.svg"> </div> <div class="leftdirection recent-prev"><img src="img/left-arrow.svg"> </div> </div> </div> </section> <?php }} else { echo "0 results"; } ?> </main> (Desculpa se não ficou alinhado, só copiei e colei.)

      Reparem que primeiro dou um select na tabela genero, e salvo o ID dela em uma variavel, e depois vou um select na tabela filmes usando a variavel que salvei antes como uma condição.
      Porem na tabela filmes, os generos estão salvos separados por virgula. Como consigo fazer um select separando ela das virgulas?
       
    • Por Jonatas Provido
      Pessoal veja se consegue me ajudar 
      Hoje tenho uma  TABELA1 e TABELA2
      Tabela =  TABELA1
      Colunas = NCM
                         IPOS_FEDER
                         IPOS_MUNIC
                         IPOS_GLOBAL
                         IPOS_ESTAD
      A Tabela2 onde esta com as informações novas que precisa ser atualizado a Tabela1
      TABELA = TABELA2
      COLUNAS = NCM
                            FEDERAL
                            MUNICIP
                            GLOBAL
                            ESTADU
                       
      Preciso que compare o coluna NCM as demais coluna se diferente valor tabela 2 atualiza a tabela1 
       
      já li vários post porem acho que a forma que estou pesquisando não seja coerente. 
      Obrigado! pela atenção

       
    • Por luizfabianochaves
      Boa tarde..
      Estou com um problema aqui, preciso fazer um calculo mas não tenho ideia de como fazer... vou ver se consigo explicar..
      na empresa temos 60 representantes cada um tem uma meta de vendas diferente a ser cumprida mensalmente, quando ele não bate a meta, o saldo tem que ser diluíido nos meses seguintes..
       
      exemplo: representante 01 teria que vender 1.000 em janeiro. vendeu 900 esses 100 reais que faltaram, teriam que ir pra os outros meses.. 100/11=9,09 então a meta dos outros meses seria de 1009,90.. conseguiram entender?
    • Por pamf
      Prezados, boa noite!
       
      Me deparei com um problema aqui que acredito que seja bem simples para voces. Estou aqui precisando agrupar dados com a maior data de vendas para um cliente Numa coluna para todas as linhas do cliente (registro a registro das notas). Tambem preciso fazer algumas operacoes de total para disponibilizar um SCRIPT SQL sql para ser consumido por uma ferramenta analitica de BI e foi especificado exatamente como esta na planilha. Para facilitar criei os cenários. Tem os scripts de criacao da tabela e de insert e os resultados esperados nas colunas calculadas pelo sql. Espero que a documentação esteja boa para o caso de uso e que voces possam me ajudar. POde ser didatico para quem da aulas de PL SQL.
       
      Grato
       
      Att
      Paulo
       
      PS: como nao aceitou a planilha, escrevo abaixo:
       
      --SCRIPT DE CRIACAO TABELA ORACLE CREATE TABLE T_VENDAS (DATA_VENDA DATE, COD_CLI NUMBER (10), CLIENTE VARCHAR2(10), NUM_NF VARCHAR(10), ITEM VARCHAR2(20), QTDE NUMBER (10,2), VL_TOT_ITEM NUMBER (10,2), VL_UNIT NUMBER (10,2)); --INSERTS INSERT INTO T_VENDAS VALUES('05-Jan-2019',15,'JOAO','20','MESA',1,200,200); INSERT INTO T_VENDAS VALUES('05-Jan-2019',15,'JOAO','20','CADEIRA',4,240,60); INSERT INTO T_VENDAS VALUES('21-Jan-2019',15,'JOAO','66','BANCO',2,240,120); INSERT INTO T_VENDAS VALUES('08-Feb-2019',15,'JOAO','102','GELADEIRA',1,600,600); INSERT INTO T_VENDAS VALUES('07-Mar-2019',15,'JOAO','145','ARMARIO',1,450,450); INSERT INTO T_VENDAS VALUES('05-Jan-2019',20,'MARIA','28','SOFA',1,750,750); INSERT INTO T_VENDAS VALUES('05-Jan-2019',20,'MARIA','28','TAPETE',2,280,140); INSERT INTO T_VENDAS VALUES('21-Jan-2019',20,'MARIA','72','CORTINA',2,160,80); INSERT INTO T_VENDAS VALUES('08-Feb-2019',20,'MARIA','120','CAMA',1,400,400); INSERT INTO T_VENDAS VALUES('17-Feb-2019',20,'MARIA','151','COLCHAO',1,500,500);  
       
      CENARIOS (DADOS INSERIDOS NA TABELA T_VENDAS - COLUNAS DO EXCEL ABAIXO: B, C, D, E, F, G, H, I)
       

       
      COLUNAS CALCULADAS ESPERADAS NO SCRIPT SQL ALEM DAS COLUNAS JA EXISTENTES NA TABELA
       

       
      RESULTADO ESPERADO DO SCRIPT SQL
       

       
       
       
         
    • Por TeixeiraRamos
      Olá,
      Com essa "Procedures" consigo criar a coluna data e semana.
      Como poderia fazer para a "Precedures" criar uma outra coluna só com o dia e o mês, como por exemplo: 27 de fevereiro
      Obrigado
      BEGIN DECLARE var_data DATE; DECLARE var_dia VARCHAR(50); DECLARE contador INT DEFAULT 0; SET var_data = data_inicial; SET var_dia = DAYNAME(data_inicial); WHILE contador < intervalo DO INSERT INTO tb02_santosdodia(ctb02_datasantosdia, ctb02_diassemanas) VALUES (var_data, var_dia); SET contador = contador + 1; SET var_data = DATE_ADD(data_inicial, INTERVAL contador DAY); SET var_dia = DAYNAME(var_data); END WHILE; END  
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.