AND e OR em cláusula SQL Server

13/05/2015

0

Olá a todos.
Estou realizando uma consulta em Sql Server 2014. Ela contém alguns Joins e algumas conversões de dados. Quando coloco na cláusula WHERE, onde eu quero o retorno de campos maiores que ZERO, ele retorna valores iguais a zero. Coloquei as imagens em anexo.

Agradeço a ajuda.

[img]http://arquivo.devmedia.com.br/forum/imagem/388861-20150513-111649.jpg
[/img][img]http://arquivo.devmedia.com.br/forum/imagem/388861-20150513-111707.jpg[/img]
Rodolpho França

Rodolpho França

Responder

Posts

13/05/2015

Jothaz

Posta a query! Senão não tem como ajudar!
Responder

13/05/2015

Rodolpho França

Opa Jothaz, desculpe, é que eu tinha enviado, mas deu erro na imagem.
Segue.

[img]http://arquivo.devmedia.com.br/forum/imagem/388861-20150513-112909.jpg[/img]
Responder

13/05/2015

Rodolpho França

Opa Jothaz, desculpe, é que eu tinha enviado, mas deu erro na imagem.
Segue.

[img]http://arquivo.devmedia.com.br/forum/imagem/388861-20150513-112909.jpg[/img]
Responder

13/05/2015

Ceilton M

O registros retornados com Quantidade Saldo Estoque = 0 tem Numero do documento igual a Null ???

O problema esta ai....

Faltam parênteses para fechar sua logica...
Responder

13/05/2015

Rodolpho França

Opa Cleiton, obrigado pelo retorno.
Respondendo sua pergunta, sim, o retorno da quantidade de soldo pode ter documentos igual a Null, vou explicar,
Vou gerar um arquivo texto a partir destas informações. Neste arquivo, deve informar todos os produtos com seus respectivos lotes. Se esses produtos estiverem em algum pedido, eu devo retornar o documento do cliente deste pedido. Por isso que eu posso ter as duas informações, a do produto com o documento igual a null e a do produto com o documento.

Atenciosamente.
Responder

13/05/2015

Ceilton M

A operação AND tem precedência sobre a operação OR.
Sua logica ficaria assim:
(expressão AND expressão AND expressão)
OR expressão.

Como a expressão apor o OR é de Numero do documento igual a Null , todos os registros com documento = Null serão retornados, independente do saldo em estoque.
Você esta dizendo ao banco que quer os registros que tenham saldo > 0 OU com documento = Null...

Entendeu ????
Responder

13/05/2015

Jothaz

declare @tab as table (id int, qtde int)
insert into @tab(id,qtde) values (1,null)
insert into @tab(id,qtde) values (2,44)
insert into @tab(id,qtde) values (1,0)
insert into @tab(id,qtde) values (1,77)

select * 
from @tab 
where qtde > 0 or qtde is null
Responder

13/05/2015

Fabiano Carvalho

Seria

and (expressao1 or expressao2)
Responder

13/05/2015

Rodolpho França

Obrigado pelo retorno de todos.

Cleiton, eu entendi a sua proposta, mas não consegui fazer uma sintaxe na qual eu retorne todos os valores, pois preciso das duas informações, as Null e as preenchidas com o documento.


1- Eu preciso de todos os produtos com seus respectivos lotes.
2- Caso algum desses produtos estiverem em algum determinado tipo de pedido, retorne o CNPJ deste cliente.

O resultado deve conter todos os produtos, ele estando em algum pedido ou não.
Responder

13/05/2015

Ceilton M

Vou tentar

1 - códigopessoa = 85101
2 - filial = '0001'
3 - statuspedido = 'A'
4 - saldoestoque > 0
5 - numerolote <> '0'
and (
6 - codigodocumento = 1
7 - codigodocumento is null )

Vai filtrar : pessoa, filial, pedido, saldo > 0, lote, e ( documento = 1 ou sem documento)

É isso que você precisa ?????
Responder

13/05/2015

Ceilton M

Temos um problema que eu não tinha reparado.
Os joins com left join não terão o efeito esperado na clausula where.
Left join retorna todas as linhas do lado esquerdo da juncao.
Você esta colocando filtros de linhas na clausula where, de tabelas que ficarão a direita. PedidoCliente por exemplo.

Com isso a tabela de "Produto", que é a base da query do lado esquerdo, não será afetada,
resultando no retorno de todos os produtos.
Responder

13/05/2015

Rodolpho França

Obrigado pelo retorno.

Cleiton, é justamente isso que eu quero. Eu quero preservar os produtos, pois ela é o elemento principal da consulta. Deixa eu tentar explicar mais detalhadamente.

Eu vou gerar um arquivo texto onde será mostrado todos os produtos do estoque com seus respectivos lotes.
Caso algum produto esteja em um determinado tipo de pedido, eu tenho que gravar no arquivo o CNPJ do cliente.

Por Exemplo (arquivo texto):

Produto Lote Quantidade Custo Pedido CNPJ

3504305M 6831789-025 2.00UN 567.45 N
3504305M 6831789-025 1.00UN 567.45 S 12307187000150

No exemplo acima, eu tenho um produto, que está em um lote, com suas quantidades, onde uma unidade está num pedido e duas não estão em pedidos.
Responder

13/05/2015

Ceilton M

Faz o que te falei no post de 15:17h

Coloca as duas ultimas clausulas entre parênteses e uma com o resto por AND.


expressão and
expressão and
expressão and
expressão and
expressão and
( codigodocumento = 1 or codigodocumento is null )
Responder

13/05/2015

Rodolpho França

Desse modo, a consulta só resulta com o campo CNPJ preenchido.
Responder

13/05/2015

Marcos P

Rodolpho,

É difícil ajudar em uma situação dessas sem podermos ter um ambiente para simulação...

Você conhece o Fiddle ?

Conseguiria criar uma réplica da estrutura do banco lá e inserir registros para teste ?

Nesse ambiente temos mais chances de ajudá-lo !
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar