SELECT EM TRÊS TABELAS COMPARANDO DATA

15/05/2019

0

Preciso criar um script que traga quantos clientes efetuaram algum pagamento após o atendimento e quantas não efetuaram nenhum pagamento, para fazer isso preciso comparar as datas de duas tabelas que não estão relacionadas entre si.

A tabela PRV_PARCELAS possui a data de pagamento que preciso comparar com a data de atendimento que esta na tabela PRV_ATENDIMENTOS, ambas as tabelas possuem relacionamento com a tabela PRV_VENDAS.

Fiz um select mas esta duplicando valores e não esta consistente, alguem consegue me ajudar??

select distinct b.Cod_Venda, a.Cod_Venda, b.Cod_Venda, a.Data_Atendimento, b.Data_Pagamento
from dbo.PRV_Atendimentos$ a, dbo.PRV_Parcelas$ b, dbo.PRV_Vendas$ c

where CONVERT(VARCHAR(10),a.Data_Atendimento,111) between '2017-05-01' and '2017-05-31'
and a.Cod_Venda = b.Cod_Venda
and a.Data_Atendimento <= b.Data_Pagamento
order by 2 desc ;
Jorgelessa

Jorgelessa

Responder

Posts

15/05/2019

Binoti

Pode ser a falta de relacionamento no where, tenta incluir campos que as tabelas tenham em comum, como número cliente ...
Responder

15/05/2019

Jorgelessa

Então o problema é que não existe relacionamento entre as tabelas PRV_PARCELAS e PRV_ATENDIMENTOS, ambas as tabelas possuem relacionamento com a tabela PRV_VENDAS onde a tabela PRV_PARCELAS possui o ID_CLIENTE e COD_VENDA e a tabela PRV_ATENDIMENTOS possui o COD_VENDA só.

Será que tem como filtrar as vendas comparando as vendas das PRV_PARCELAS x vendas da PRV_VENDAS e com o resultado verificar as vendas desse resultado que existe na PRV_ATENDIMENTOS e fazer uma comparação de data entre a PRV_PARCELAS(data_pagamento) X PRV_ATENDIMENTO(data_atendimento) e retornar a quantidade de vendas que foram pagas depois do atendimento?
Responder

16/05/2019

Emerson Nascimento

tente com a instrução abaixo.
há campos que você não citou. isto foi só pra te dar um 'norte'.
select
	c.Cod_Venda, b.Num_Parcela, b.Data_Vencimeto, a.Data_Atendimento, b.Data_Pagamento
from
	dbo.PRV_Vendas$ c
inner join
	dbo.PRV_Parcelas$ b on b.ID_CLIENTE = c.ID_CLIENTE and b.COD_VENDA = c.COD_VENDA
	and ((b.Data_Pagamento is null and b.Data_Vencimento < GETDATE()) or (b.Data_Pagamento > b.Data_Vencimento)) -- parcelas vencidas ou pagas com atraso
left join
	dbo.PRV_Atendimentos$ a on a.Cod_Venda = b.Cod_Venda
	and a.Data_Atendimento > b.Data_Vencimento -- atendimento efetuado após o vencimento da parcela
	and (b.Data_Pagamento is null or a.Data_Atendimento <= b.Data_Pagamento) -- parcela ainda em aberto ou paga após o atendimento
where
	b.Data_Pagamento is null
	or CONVERT(VARCHAR(10),a.Data_Atendimento,111) between '2017-05-01' and '2017-05-31'
group by
	c.Cod_Venda, b.Num_Parcela, b.Data_Vencimeto, a.Data_Atendimento, b.Data_Pagamento
order by
	c.Cod_Venda desc

desta forma deverão ser apresentados todos os títulos vencidos (ainda em aberto) ou pagos depois do atendimento.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar