SQL - Unir select - Dúvida
Bom dia.
Não sou programador. Apenas manipulo algumas informações de um banco de dados do novo sistema da minha empresa. Sou apenas um iniciante bem curioso.
Desenvolvi 2 select, aonde na primeira consigo ver os numeros de pedidos e valor total de pedidos por dia, escolhendo o mes e o ano. No segundo, as informações são quase as mesmas, porem são notas fiscais e valores faturados.
São banco de dados diferentes (um é da area comercial - pedidos, o outro é da area de faturamento - notas).
Gostaria de unir essas consultas em uma unica, aonde mostrasse nos dias do mes e ano escolhido os numeros de pedidos, o valor total de pedidos, o numero de notas e o valor total faturado.
Como não conheço muito, tentei fazer algum join, porém ele junta todas as linhas de notas e pedidos e cria varias linhas.
Abaixo segue os dois select
select s.data, Count(s.saida_id) "Número de notas", sum(s.valorproduto) "Valor Total"
from saida s
WHERE extract(month from s.DATA) =:pmes and extract (year from s.DATA) =:pano and s.ativo=''Y'' AND S.natureza=0
group by s.data
select p.data, Count(p.pedido_id) "Número de Pedidos", sum(p.valorproduto) "Valor Total"
from pedido p
WHERE extract(month from P.DATA) =:pmes and extract (year from P.DATA) =:pano and (ATIVO = ''Y'')
and (p.tipovenda in (''00001'',''00004'',''00005'',''00011'', ''00013''))
group by p.data
Desde já obrigado
Não sou programador. Apenas manipulo algumas informações de um banco de dados do novo sistema da minha empresa. Sou apenas um iniciante bem curioso.
Desenvolvi 2 select, aonde na primeira consigo ver os numeros de pedidos e valor total de pedidos por dia, escolhendo o mes e o ano. No segundo, as informações são quase as mesmas, porem são notas fiscais e valores faturados.
São banco de dados diferentes (um é da area comercial - pedidos, o outro é da area de faturamento - notas).
Gostaria de unir essas consultas em uma unica, aonde mostrasse nos dias do mes e ano escolhido os numeros de pedidos, o valor total de pedidos, o numero de notas e o valor total faturado.
Como não conheço muito, tentei fazer algum join, porém ele junta todas as linhas de notas e pedidos e cria varias linhas.
Abaixo segue os dois select
select s.data, Count(s.saida_id) "Número de notas", sum(s.valorproduto) "Valor Total"
from saida s
WHERE extract(month from s.DATA) =:pmes and extract (year from s.DATA) =:pano and s.ativo=''Y'' AND S.natureza=0
group by s.data
select p.data, Count(p.pedido_id) "Número de Pedidos", sum(p.valorproduto) "Valor Total"
from pedido p
WHERE extract(month from P.DATA) =:pmes and extract (year from P.DATA) =:pano and (ATIVO = ''Y'')
and (p.tipovenda in (''00001'',''00004'',''00005'',''00011'', ''00013''))
group by p.data
Desde já obrigado
Marcelo Kermessi
Curtidas 0
Respostas
Emerson Nascimento
10/12/2020
tente algo assim:
você disse que são bancos de dados diferentes. se forem precisa de uma tratativa diferente. se forem apenas tabelas diferentes, a solução acima deve atender.
select datas.data, coalesce(ped.QtdPed,0) "Número de Pedidos", coalesce(ped.VlrPed,0) "Valor Pedidos", coalesce(nfs.QtdNF,0) "Número de Notas", coalesce(nfs.VlrNF,0) "Valor Notas" from ( select s.data from saida s where extract(month from s.DATA) = :pmes and extract(year from s.DATA) = :pano and s.ativo='Y' AND S.natureza=0 group by s.data union select p.data from pedido p where extract(month from p.DATA) = :pmes and extract(year from P.DATA) = :pano and (ATIVO = 'Y') and (p.tipovenda in ('00001','00004','00005','00011', '00013')) ) datas -- obtém todas as datas com movimento (dentro do período informado) left join ( select s.data, Count(s.saida_id) QtdNF, sum(s.valorproduto) VlrNF from saida s where extract(month from s.DATA) = :pmes and extract(year from s.DATA) =:pano and s.ativo='Y' AND S.natureza=0 group by s.data ) nfs on on nfs.data = datas.data -- notas fiscais agrupadas por data left join ( select p.data, Count(p.pedido_id) QtdPed, sum(p.valorproduto) VlrPed from pedido p where extract(month from P.DATA) =:pmes and extract(year from P.DATA) =:pano and (ATIVO = 'Y') and (p.tipovenda in ('00001','00004','00005','00011', '00013')) group by p.data ) ped on ped.data = datas.data -- pedidos agrupadas por data
GOSTEI 0