interceção e conjunção de tabelas

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
joaoluizbt
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 37
Registrado em: Qui, 05 Mai 2011 3:53 pm
Localização: Rio de Janeiro

Olá,

estou somando valores de duas tabelas.
cada uma posui um codigo e um valor, e a soma é feita dos valores por cada codigo. ou seja, esta agrupado por codigo as somas dos respectivos valores.
ok.
se o codigo de uma tabela é igual ao codigo da outra, eu somo as somas das duas, senão, eu exibo apenas a soma da tabela que possui aquele codigo.

com o codigo abaixo, eu só consigo verificar as somas que possuem o mesmo codigo e somá-las. como eu adiciono os códigos que não possuem o seu par na outra tabela?
ou seja, quero exibir a soma de todos os códigos das duas tabelas, mas se existirem nas duas, eu quero soma-los.

Selecionar tudo

  select adiantamento.cod_dealer, (NVL(retroativo.soma_retroativo,0) + NVL(adiantamento.soma_adiantamento,0)) as base_adiantamento
  from (select pdv, sum(vl_pgto) as soma_retroativo
        from tbl_retroativo
        group by pdv) retroativo,
       (select cod_dealer, sum(val_pg) as soma_adiantamento
        from tbl_adiantamento
        group by cod_dealer) adiantamento
   where (retroativo.pdv = adiantamento.cod_dealer) 
muito obrigado.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

não sei se estaria 100% certo, mas tente a querie abaixo:

Selecionar tudo

SELECT relacao_pdv.pdv,
       (NVL(retroativo.soma_retroativo,0) + NVL(adiantamento.soma_adiantamento,0)) AS base_adiantamento 
  FROM (SELECT DISTINCT pdv 
          FROM tbl_retroativo
        UNION ALL
        SELECT DISTINCT cod_dealer AS pdv 
          FROM tbl_adiantamento) relacao_pdv,
       (SELECT pdv, 
               SUM(vl_pgto) AS soma_retroativo 
          FROM tbl_retroativo 
         GROUP BY pdv) retroativo,
       (SELECT cod_dealer AS pdv, 
               SUM(vl_pg) AS soma_adiantamento 
          FROM tbl_adiantamento 
         GROUP BY cod_dealer) adiantamento
 WHERE relacao_pdv.pdv = retroativo.pdv(+)
   AND relacao_pdv.pdv = adiantamento.pdv(+)
 ORDER BY relacao_pdv.pdv ASC   
Abraços,

Sergio
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes