SQL - Unir select - Dúvida

SQL

10/12/2020

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
Marcelo Kermessi

Marcelo Kermessi

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

10/12/2020

tente algo assim:
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
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.
GOSTEI 0
POSTAR