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 Viniciusr9
      Estou com um problema com esse esse script abaixo: 
      tenho um checkbox na minha página ( não em relatório, na página mesmo, um item de página) e gostaria que o mesmo ao ser clicado e pressionado um botão submit realizasse o procedimento do script, porém ele faz o processo mas não me retorna nada. acredito que o problema seja no LOOP do APEX_APPLICATION.G_F01 . Alguém consegue me ajudar com isso?
      DECLARE V_DS_COLAB VARCHAR2(50); BEGIN APEX_DEBUG.MESSAGE('CHECK:'|| vCHECK); FOR A IN 1 .. APEX_APPLICATION.G_F01.COUNT LOOP BEGIN SELECT C.DS_COLABORADOR INTO V_DS_COLAB FROM COLABORADOR C WHERE C.USER_APEX = V('APP_USER') ; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20001,'NENHUM REGISTRO ENCONTRADO!'); WHEN TOO_MANY_ROWS THEN RAISE_APPLICATION_ERROR(-20002,'MAIS QUE UM REGISTRO ENCONTRADO!'); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20003,'ERRO NAO PREVISTO' || SQLERRM) ; END; :P12_SUPER := (V_DS_COLAB || ' - ' || TO_CHAR(SYSDATE,'DD/MM/RRRR HH24:MI')); UPDATE COMPETENCIA_COLABORADOR CC SET FINALIZADO_SN = 'S' WHERE CC.CD_EQUIPE = :P12_EQUIPE AND CC.CD_COMPETENCIA = (SELECT C.CD_COMPETENCIA FROM COMPETENCIA C WHERE TO_DATE(LPAD(C.MES_COMPETENCIA,2,'0') || '/' || C.ANO_COMPETENCIA,'MM/RRRR') = TO_DATE(:P12_COMPETENCIA,'MM/RRRR')); END LOOP; END;  
    • By Motta
      Estou tentando mandar uma "Blind Copy" pelo nossa Procedure de envio de email , pela documentação estaria ok , mas não está enviando nem gerando qualquer erro , o código está abaixo , os itens sensíveis foram trocados por "x"
      O que posso estar fazendo de errado ?
      SP :
       
      create or replace PROCEDURE ENVIA_EMAIL_CLOBHBC (ds_email_origem_w varchar2, ds_email_destino_p varchar2, ds_assunto varchar2, p_attach_clob IN CLOB DEFAULT NULL, p_httm in varchar2 default 'S', p_log out varchar2, p_nome_destino in varchar2 default null) is l_step PLS_INTEGER := 12000; ds_smtp_w varchar2(20) := 'xx.xx.x.xx'; /* Abre conex?o SMTP e HTTP */ CONEXAO UTL_SMTP.CONNECTION; vs_origem varchar2(100) := ds_email_origem_w; -- vs_para varchar2(100); vs_cc varchar2(100); -- PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS BEGIN UTL_SMTP.WRITE_DATA(CONEXAO, name || ': ' || header || UTL_TCP.CRLF); END; BEGIN /* Abre conex?o com um Servidor SMTP(Simple Mail Transfer Protocol), porta padr?o SMTP e 25 */ CONEXAO := utl_smtp.open_connection (ds_smtp_w,25); UTL_SMTP.HELO (CONEXAO, ds_smtp_w); /* Endereco do servidor de SMTP */ --utl_smtp.command (CONEXAO, 'AUTH LOGIN'); --utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_user_id_w))))); --UTL_SMTP.COMMAND (CONEXAO, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW((DS_SENHA_SMTP_W))))); UTL_SMTP.MAIL (CONEXAO, ('<' || vs_origem || '>')); /* E-mail de quem esta mandando */ -- se estiver em lista separado por ";" manda para o 1º como "para" e para o 2º como CC (copia) /* Para quem vou mandar */ IF INSTR(ds_email_destino_p,';') = 0 THEN vs_para := ds_email_destino_p; UTL_SMTP.RCPT (CONEXAO, ('<' || ds_email_destino_p || '>')); /* Para quem vou mandar */ ELSE vs_para := SUBSTR(ds_email_destino_p,1,INSTR(ds_email_destino_p,';')-1); vs_cc := SUBSTR(ds_email_destino_p,INSTR(ds_email_destino_p,';')+1,length(ds_email_destino_p)); UTL_SMTP.RCPT (CONEXAO, ('<' || vs_para || '>')); /* Para quem vou mandar original */ UTL_SMTP.RCPT (CONEXAO, ('<' || vs_cc || '>')); /* Para quem vou mandar copia */ END IF; UTL_SMTP.OPEN_DATA(CONEXAO); If upper(p_httm) <> 'S' Then send_header('Subject','=?iso-8859-1?Q?' ||UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto)))); Else --send_header('Subject','=?iso-8859-1?Q?' ||UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto)))|| '?='); send_header('Subject',UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto)))); end if; If upper(p_httm) <> 'S' Then UTL_SMTP.write_data(CONEXAO, 'Content-Type: text/html; charset="UTF-8"' || utl_tcp.CRLF); Else UTL_SMTP.write_data(CONEXAO, 'Content-Type: text/html; charset="UTF-8"' || utl_tcp.CRLF ); end if; send_header('From',ds_email_origem_w); --se denominou o destino formata o envio , senão vai o proprio email --tratamento diferente do "from" pois este é em geral dinamico --feito pela stored procedure chamadora if trim(p_nome_destino) is null then send_header('To',vs_para); else send_header('To','"'||trim(p_nome_destino)||'" <'||vs_para||'>'); end if; If Trim(vs_cc) is not null Then--copia (nao formata o destino) send_header('CC',vs_cc); end if; send_header('BCC',vs_origem);---<<< A LINHA COM PROBLEMA PARECE SER ESTA *********************** FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_clob) - 1 )/l_step) LOOP UTL_SMTP.WRITE_DATA(CONEXAO, DBMS_LOB.substr(p_attach_clob, l_step, i * l_step + 1)); END LOOP; UTL_SMTP.CLOSE_DATA(CONEXAO); UTL_SMTP.QUIT (CONEXAO); Exception when OTHERS then utl_smtp.quit (conexao); p_log := 'Erro: ' || SQLERRM; END ENVIA_EMAIL_CLOBHBC;
    • By nathicoelhoo
      Tenho um cadastro de cliente e no cadastro é selecionado o sexo e o estado, por exemplo. Na área de edição, preciso puxar esses dados JÁ SELECIONADOS para um combobox. Tentei fazer com foreach porém não funcionou. Alguém pode me ajudar?
      <div class="form-group col-md-5" > <label for="inputSexo">Sexo</label> <select name="sexo_cliente" id="sexo_cliente" class="form-control" disabled> <option selected disabled="">Sexo</option> <?php require_once "api/conexao.php"; try { $prepared3 = $conexao_pdo->prepare("select * from sexo"); $prepared3->execute(); $result3 = $prepared3->fetchAll(); foreach($result3 as $resultado3) { echo "<option value='". $resultado3["cod"] ."'>". $resultado3["sexo"] ."</option>"; } } catch (PDOException $e) { echo "<option></option>"; } ?> </select> </div>  
    • By RAFAEL C D EMELO
      Ola galera estou com uma duvida sou novo trabalhando com Oracle e preciso calcular A diferenca entre datas no caso seria

      Ver as datas de um contrato e primeiramente calcular se ele esta ativo no mes nesse se sim ele precisaria calcular
      quantos dias ele esta ativo NO mesmo por exemplo ele pode ter iniciado o contraro no dia 1 ou no dia 16 ai calcularia
      os dias que ele precisa me pagar pelo seguro mas estou com duvidas de como posso calcular A quantidades de dias nesse
      caso se alguém puder ajudar fico muito agradecido.
       
    • By Viniciusr9
      Boa tarde pessoal,
      basicamente eu preciso do retorno de horas entre duas datas, porém tenho condições a tratar .
      basicamente tenho 2 colunas ( dt_fim e dt_ini ) que representam data final e data inicial. Preciso da diferença entre as duas retornada em uma outra coluna (hr_ausencias) , porém a cada dia posso computar no máximo 9 horas, e desconsiderar finais de semana e feriados( esses cadastrados em uma tabela) . Seria melhor tratar isso com uma Trigger , um Script PL/SQL , como me sugerem? Agradeço quem puder ajudar.
×

Important Information

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