SELECT EM TRÊS TABELAS COMPARANDO DATA
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 ;
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
Curtidas 0
Respostas
Binoti
15/05/2019
Pode ser a falta de relacionamento no where, tenta incluir campos que as tabelas tenham em comum, como número cliente ...
GOSTEI 0
Jorgelessa
15/05/2019
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?
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?
GOSTEI 0
Emerson Nascimento
15/05/2019
tente com a instrução abaixo.
há campos que você não citou. isto foi só pra te dar um 'norte'.
desta forma deverão ser apresentados todos os títulos vencidos (ainda em aberto) ou pagos depois do atendimento.
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.
GOSTEI 0