Selecionar Cliente sem Compra nenhuma de determinado vendedor
05/09/2018
0
Fiz toda a verificação dos clientes dos meus vendedores e o select realmente está trazendo todos os clientes vinculados de cada vendedor, mas quando vou utilizar uma verificação no where para retornar somente os clientes que não tiveram venda ele não apresenta o resultado correto.
Estou utilizando o seguinte código:
SELECT CODCLIENTETABELA2, RAZAOSOCIALCLIENTE, CODVENDEDORTABELA2, NOMEVENDEDOR FROM CLIENTETABELA2, VENDEDOR, PARCEIRO, VENDAS WHERE CODVENDEDORTABELA2 = CODVENDEDORTABELA1 AND CODCLIENTETABELA2 = CODCLIENTETABELA1 AND CODVENDEDORTABELA2 = ''''X'''' UNION SELECT CODIGOCLIENTETABELA1, RAZAOSOCIALCLIENTE, NOMECLIENTETABELA1, CODVENDEDORTABELA1, NOMEVENDEDOR FROM CLIENTE, VENDEDOR, CLIENTETABELA2, VENDAS WHERE CLIENTE.CODVENDEDORTABELA1 = VENDEDOR.CODVENDEDORTABELA1 AND CLIENTE.CODCLIENTETABELA1 NOT IN VENDAS.CODCLIENTETABELA1 AND VEN.CODVEND = ''''X''''
Se alguém puder me dar uma luz do que estou fazendo de errado agradeço muito. Obrigado desde já.
Maicon Scapatici
Post mais votado
05/09/2018
Não conheço muito bem a mecânica do Oracle, mas vc vai utilizar mesmo com union?
Eu sugeriria um subselect para fazer o que vc precisa.
Por exemplo:
select codcliente, nome, from clientes where codcliente not in (select codcliente from vendas where datavenda between '01.08.2018' and '31.08.2018' group by codcliente)
Sem muita analise, montei isso para vc ter uma ideia de como poderia ser feito.
Normalmente eu faco de modo diferente aqui, mas as minhas estruturas e tabelas sao diferentes, e utilizo o SQL Server.
Espero que tenha ajudado.
Alex Lekao
Mais Posts
06/09/2018
Maicon Scapatici
06/09/2018
Alex Lekao
Fico feliz em poder ajudar.
Mas acredito que possa melhorar ainda mais esse script, como disse não conheço bem a mecânica do Oracle, na vdd não conheço nada. rsrsrs
Mas esse select que te sugeri ele não é performático, trabalho com sql server e nele not in não eh uma boa opção por causa da performance, e uma opção seria o outer apply, não sei se isso eh possível com Oracle.
Ou até mesmo usando Join, mas entre join e outer o outer eh mais performático em alguns casos, mas precisa analisar performance e tudo o mais.
Caso precise, podemos tentar melhorar esse script para te dar a melhor performance.
Atenciosamente,
06/09/2018
Maicon Scapatici
10/03/2021
Lucas Brum
Cara, depois de vagar por dias tentando resolver um problema em uma consulta, graças a vocês consegui chegar no resultado que eu queria!
Sou iniciante na área, então toda e qualquer informação é bem vinda hehehe...
Precisava trazer somente clientes que não tinham contratos ativos em uma consulta, só que a coluna DS_SITUACAOCONTRATO tem um valor para cada contrato do cliente(Ativo, liquidado, cancelado). Então se eu tentasse usar somente o filtro DS_SITUACAOCONTRATO = ''LIQUIDADO'' na minha tabela CONTRATOSPRODUCAO me trazia clientes que tinham contratos liquidados, mas acabava trazendo os ativos tbm...
Daí tentei ver em vários fóruns e não conseguia resolver... Hoje deu certo!
Com base no que você respondeu, utilizei a mesma lógica, ficando assim o filtro:
Usei no WHERE NR_CPF_CNPJ NOT IN (Select NR_CPF_CNPJ
From vwContratosProducao
Where DS_SITUACAOCONTRATO = ''Ativo''
GROUP BY NR_CPF_CNPJ)
Valeuuu!
10/03/2021
Heraldo Araujo
Clique aqui para fazer login e interagir na Comunidade :)