Jump to content

Archived

This topic is now archived and is closed to further replies.

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

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.

Share this post


Link to post
Share on other sites

  • Similar Content

    • By dfoliveira82
      Bom dia senhores,
       
      sou novo no Oracle, antes trabalhava com SQL SERVER, e me deparei com algo que ja estou a horas tentando solucionar mas nao consegui.
      Nessa Trigger que vou postar, quando mando compilar ela, fala que esta faltando uma virgula, apos o values, mas nao precisa dela e nao acho onde pode ser essa virgula faltante.
      CREATE OR REPLACE TRIGGER JOBS_CL_INSERE_USUARIO AFTER INSERT OR UPDATE OF EXPORTADA_AVA ON SITE_USUARIOS REFERENCING NEW AS NEW BEGIN INSERT INTO BLACKBEAN.TBL_USERS VALUES (NULL, 'INSERT', NULL, 'db', '0', '0', '0', TO_CHAR(:NEW.CPF), MD5(:NEW.CPF||'port@l'), TO_CHAR(:NEW.CPF), SUBSTRING(:NEW.NOME, 1, INSTR(:NEW.NOME, ' ')-1), SUBSTRING(:NEW.NOME, INSTR(:NEW.NOME, ' ')+1, LEN(:NEW.NOME)), 'email@email.com', NULL, NULL, DATE_TO_UNIX_TS(SYSDATE), NULL, NULL); END; / Se alguem puder me ajudar agradeceria.
    • By Rodrigo V
      Boa tarde pessoal, sou novo aqui e não sei se o conteúdo que estou postando está no lugar correto.
      Estou com uma dúvida no ajax de uma requisição onde o retorno do banco popula o meu select, mas o problema é que  meu select devido possuir muitos dados ( em torno de 3000 options) quando retorna o navegador da uma leve travada mas no navegado do celular(com android 9) e trava ao ponto de ter que fechar aplicação. Acredito que teria que fazer um option que carregue por demanda algo assim, mas não sei se o meu pensamento está correto, e se estiver não sei como fazer... se alguém conseguir me ajudar agradeço. segue abaixo  códigos:
       
      onde é populado o select
                 <div class="col-md-2">             <select class="btao1" id="resultados"></select>             <input id="btao1" type="submit" value="Conferir" />           </div>  
      requisicao ajax
      <script>   $(document).ready(function() {     select_resultados()     });     function select_resultados() {     $.ajax({       url: 'select_resultados.php',       method: 'GET',       success: function(dados) {         $('#resultados').html(dados);       }     });   }   </script>  
      pagina php que busca no banco 
       
      $query_select = "SELECT * FROM resultados ORDER BY id DESC"; $result_select = $connect->prepare($query_select); $result_select->execute();   while($resultado_select = $result_select->fetch(PDO::FETCH_ASSOC)){     extract($resultado_select);     echo '         <option value='.$id.'>'.$name.'</option>'; }  
       
    • By asacap1000
      Olá galera estou quebrando a cabeça aqui e não sei mais o que fazer. Estamos migrando nossa intranet que estava desatualizada demais e estamos colocando toda ela em php7.3.
      Dentro desse sistema temos varias consultas que são realizadas no Oracle. As consultas estão ocorrendo 100% mas ao chegar na plataforma de relatórios travou tudo. Não consegui acertar o meio de consultar por período, já utilizei "to_date, to_char, trunc" e nada. Interessante que no PLSQL o to_date funciona certo
      SELECT DISTINCT TO_DATE(IO.TIME_ARRIVAL)
        FROM IN_OUT IO
       WHERE TO_DATE(IO.TIME_ARRIVAL) BETWEEN '01/11/2021' AND '23/11/2021'
       
      1    04/11/2021
      2    18/11/2021
      3    17/11/2021
      4    14/11/2021
      5    22/11/2021
      6    08/11/2021
      7    11/11/2021
      8    13/11/2021
      9    09/11/2021
      10    10/11/2021
      11    05/11/2021
      12    19/11/2021
      13    15/11/2021
      14    03/11/2021
      15    06/11/2021
      16    23/11/2021
      17    01/11/2021
      18    02/11/2021
      19    16/11/2021
      20    20/11/2021
      21    12/11/2021
      22    21/11/2021
       
      Se eu utilizar ele ignora a data que estabeleci para a consulta
       TO_CHAR(IO.TIME_ARRIVAL,'DD/MM/YYYY') BETWEEN '01/11/2021' AND '23/11/2021'
       
      1    03/07/2013
      2    05/07/2013
      3    18/06/2013
      4    21/05/2013
      5    20/05/2013
      6    12/08/2013
      7    21/08/2013
      8    23/08/2013
      9    02/09/2013
      10    12/09/2013
       
      Isso no PLSQL, no caso do PHP o to_date não funciona nem gera o relatório, e no to_char funciona mas ignorando as datas apontadas.
       
      O que dá pra  fazer pra resolver isso, tenho que finalizar essa migração até final de Dezembro e estou começando a ficar preocupado com o tempo
       
      Agradeço qualquer ajuda que vier
    • By manolegal
      Boa tarde
      Tenho 5 campos do tipo select no meu formulário.  A seguir um dos campos.
      <div id="resp" class="form-group col-md-3" placeholder="Responsável" title="Pesquisar por Responsável"> <select class="form-control" id="resp" name="resp" placeholder="Responsável" title="Pesquisar por Responsável"> <option value="">Responsável</option> <?php $Sql = "SELECT ..."; $Resultado = ... while ($linha = @pg_fetch_array($Resultado)){. $id_responsavel_bd = $linha["id_responsavel"]; $nome_responsavel_bd = $linha["responsavel"]; if ($resp == $id_responsavel_bd){ echo "<option value='$id_responsavel_bd' selected = 'selected'>$nome_responsavel_bd</option>";} else{ echo "<option value='$id_responsavel_bd'>$nome_responsavel_bd</option>";} } ?> </select> </div> Tenho uma função jquery que ao selecionar qualquer um destes campos, faz uma requisição ajax para atualizar uma div do meu form.
      <script type="text/javascript"> $(document).ready(function(){ $('select').change(function(){ // Todos selects $('form').submit(function(){ var dados = $(this).serialize(); $.ajax({ type: "POST", url: 'arquivo_ajax.php', dataType: 'html', data: dados, }).done(function(data){ //console.log(data); $("#list").empty().html(data); }); return false; }); $("#meu_form").trigger('submit'); }); }); </script> Ao abrir o formulário e fazer a primeira seleção de algum campo do tipo select, é gerada uma solicitação ajax.
      O problema é que a cada nova seleção deste campo e de algum outro campo, ao invés de realizar UMA ÚNICA REQUISIÇÃO, está aumentando o número de requisições a cada nova ação.
      Como não tenho muitos conhecimentos em jquery/ajax em minha dúvida:
      - É normal ir aumentando o número de requisições?
      - Deveria sempre realizar apenas uma requisição (imagino que seja correto)?
      - Meu código está correto? Se não está, onde estou errando?
      Desde já agradeço pela colaboração.
       
       
×

Important Information

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