Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Linked

Consulta não coincidente não funciona

Recommended Posts

Olá pessoal,

 

A minha consulta abaixo, deveria retornar pelo menos um cliente que não possui pedido no período, mas infelizmente não está retornando nada. Vejam:

SELECT cli.Nome FROM dbo.Cliente cli
LEFT OUTER JOIN dbo.Pedidos p
ON (cli.Id = p.ClienteId)
where (convert(date,p.Cadastro) NOT BETWEEN '01/01/2000' and '05/09/2015' )

Algum colega poderia me ajudar me informando o que estaria errado nessa consulta?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não , sua consulta retorna clientes que tiveram venda FORA do intervalo

 

Dica use uma subquery com NOT IN ou NOT EXISTS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta,

 

Estou aguardando sua resposta em outra questão que fiz a dois dias atrás, se for possível você me responder, ficarei muito grato.

 

A minha consulta acima, deveria retornar os clientes que NÃO TIVERAM vendas ou pedidos no intervalo de datas.

 

Quanto a usar uma subquery com NOT IN ou NOT EXISTS, não sei como aplicar, não sou experiente em SQL SERVER. Assim como na primeira questão que você gentilmente me atendeu, eu não consigo desenvolver se não for através de exemplos.

 

Me ajudaria muito se você puder aplicar o NOT IN ou NOT EXISTS no meu exemplo acima?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou num tablet , ruim de editar , depois tento te ajudar do pc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou num tablet , ruim de editar , depois tento te ajudar do pc.

 

Legal Motta, fico te aguardando então....

 

Forte abraço e fique na paz!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio ser isto

SELECT cli.Nome 
FROM dbo.Cliente cli
WHERE NOT EXISTS (SELECT NULL
                  FROM dbo.Pedidos p
                  WHERE p.ClienteId  = cli.Id     
                  AND (convert(date,p.Cadastro) BETWEEN '01/01/2000' and 
                                                         '05/09/2015' ))

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Creio ser isto

SELECT cli.Nome 
FROM dbo.Cliente cli
WHERE NOT EXISTS (SELECT NULL
                  FROM dbo.Pedidos p
                  WHERE p.ClienteId  = cli.Id     
                  AND (convert(date,p.Cadastro) BETWEEN '01/01/2000' and 
                                                         '05/09/2015' ))

 

Ola Motta, tudo tranquilo por aí?!

 

Olha, a consulta deu certo, mas quando acrescentei a condição

AND (cli.IsConveniado = 1)
SELECT cli.Nome 
FROM dbo.Cliente cli
WHERE NOT EXISTS (SELECT NULL
                  FROM dbo.Pedidos p
                  WHERE p.ClienteId  = cli.Id  
                  
                  AND (cli.IsConveniado = 1)    
   
                  AND (convert(date,p.Cadastro) BETWEEN '01/01/2000' and 
                                                         '05/09/2015' ))

não filtrou os clientes que são marcados como true no campo [isConveniado], O que eu fiz de errado dessa vez?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque esta condição no WHERE do select principal , não do sub.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque esta condição no WHERE do select principal , não do sub.

 

Fiz assim e deu certinho:

 

SELECT cli.Nome 
FROM dbo.Cliente cli
WHERE
cli.IsConveniado = 1 AND 
 NOT EXISTS (SELECT NULL
                  FROM dbo.Pedidos p
                  WHERE p.ClienteId  = cli.Id  
                  AND (convert(date,p.Cadastro) BETWEEN '01/01/2000' and 
                                                         '05/09/2015' ))

Se você me permite uma última pergunta:

 

É necessário fazer uma pesquisa por data no formato "YYYY/MM/DD" ao invés do que fiz acima ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.