Jump to content
ripa

Unir 2 SELECTS Oracle e como resultado 2 colunas com valores diferentes

Recommended Posts

Estou enfrentando um problema, eu possuo dois selects sql

select *
from web.demonstrativo_processados 
where nroempresa = 1
  and data between to_date('2018/01/01' , 'yyyy/mm/dd')
  and to_date('2018/12/31' , 'yyyy/mm/dd')

que me trás os valores do ano de 2018 e tenho este:

inserir a descrição da imagem aqui

select * 
from web.demonstrativo_processados 
where nroempresa = 1
  and data between to_date('2017/01/01' , 'yyyy/mm/dd')
  and to_date('2017/12/31' , 'yyyy/mm/dd')

Que retorna os valores de 2017. inserir a descrição da imagem aqui

 

Eu gostaria que viesse como resposta estas duas colunas que estão em azul, por isso preciso integrar os 2 selects.

Como estou usando o php e o google charts para gerar gráficos, iria me facilitar muito o trabalho. gráfico que pretendo fazer

inserir a descrição da imagem aqui

 o while que uso para pegar os valores

    <html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['Mês', '2017', '2018'],


          <?php

            include ("./conexao_local.php");

            $sql = "select * from web.demonstrativo_processados where nroempresa = 1 and data between to_date('2017/01/01' , 'yyyy/mm/dd') and to_date('2017/12/31' , 'yyyy/mm/dd')";
            $stmt = oci_parse($conexao, $sql);

              oci_execute($stmt);

          while (($array = oci_fetch_array($stmt, OCI_BOTH)) != false) {
           $valorvenda = $array["VLRVENDA"];


           $valorvenda1 = str_replace(",",".", $valorvenda);

           ?>                       


          ['Mês 2017',  <?php echo $valorvenda1 ?>,400],
         <?php } ?>
        ]);

        var options = {
          title: 'Company Performance',
          hAxis: {title: 'Year',  titleTextStyle: {color: '#333'}},
          vAxis: {minValue: 0}
        };

        var chart = new google.visualization.AreaChart(document.getElementById('chart_div_1'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="chart_div_1" style="width: 100%; height: 500px;"></div>

  </body>
</html>

 

Obrigado...

Share this post


Link to post
Share on other sites

  tentou

 

 

select *

from web.demonstrativo_processados
where nroempresa = 1
  and data between to_da te ('2017/01/01' , 'yyyy/mm/dd')
  and to_date('2018/12/31' , 'yyyy/mm/d d ')

Share this post


Link to post
Share on other sites

Tentei amigo, mas aí vem os valores em uma coluna só, como que eu vou filtrar isso no while? eu preciso que venha uma coluna com 2017 e uma coluna com 2018, entendeu? Unindo os selects

Share this post


Link to post
Share on other sites

Você pode fazer um PIVOT , com o comando pivot ou um CASE, depois posto uma solucão aqui , estou no tablet agora impossível de editar código.

Share this post


Link to post
Share on other sites

algo assim

 

select nroempresa,
       sum(case when to_char(data,'yyyy') = '2017' then quantidade else 0 end) qtd_2017,
       sum(case when to_char(data,'yyyy') = '2018' then quantidade else 0 end) qtd_2018,
       sum(case when to_char(data,'yyyy') = '2017' then vlrvenda else 0 end) vlr_2017,
       sum(case when to_char(data,'yyyy') = '2018' then vlrvenda else 0 end) vlr_2018
from web.demonstrativo_processados
where nroempresa = 1
  and data between to_date('2017/01/01' , 'yyyy/mm/dd')
  and to_date('2018/12/31' , 'yyyy/mm/dd')
group by nroempresa

 

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

  • 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 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.
    • By edvaldo joviano de paula
      Prezados, boa tarde!
      Preciso de uma ajuda sendo possível:
       
      Tenho o seguinte cenário em uma consulta ( formação de kits de produtos tendo como produto principal um valor igual, ex: produto 1 é formado pelos produtos 2 e 3)
      select codkit, produtos from kit where codkit = 1
      ---   ----
      1    2
      1    3
      Percebem que o resultado traz o codigo do kit (1) e os produtos que compoem este kit (2,3), porem o produto 2 tambem faz parte do kit 4 junto com o produto 10 e produto 3 faz parte do kit 5 junto com o produto 11 sendo:
      kit 1 (2,3)
      kit 4 (2,10)
      kit 5 (3,11).
       
      Eu preciso de uma ajuda sobre alguma função que ao comprar os produtos 2 e 3 e estes estando na mesma nota fiscal (select produtos from notafiscal = x) traga o resultado do kit que estes dois produtos juntos formam, exemplo, ao pesquisar (select produtos from notafiscal = x) nesta nota existir os produtos 2 e 3 traga o resultado 1, se na nota existir os produtos 2 e 10 traga o resultado 4 e se existir na consulta dos itens da nota os itens 3 e 11 o resultado seja 5. Caso na pesquisa eventualmente existir por exemplo 10 unidades do item 2, 5 unidades do item 3 e 5 unidades do item 10, o resultado deve ser 1 e 4 pois 5 unidades do 2+5 unidades do 3 forma o kit 1 e 5 unidades do 2+ 5 unidades do 10 formam o kit 4.
       
      Espero ter explicado de forma a ser entendido e agradeço a ajuda.
       
×

Important Information

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