Tenho uma consulta que coleta informações com base em um conjunto de condições. Basicamente, quero saber se um local pagou mais de US $ 50 pelo dia OU se a seção de comentários contém a palavra "filtro" ...
Minha consulta é:
SELECT Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM Paid_Out_Tb
WHERE (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0,
GETDATE()), 0)) AND (Paid_Out_Amount > 50) OR
(Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
O problema é que ele retorna 460 resultados e deve retornar apenas 2.
Todas as respostas
Você precisa envolver seus critérios Paid_Out_Amoutn e Paid_Out_Comment em um segundo conjunto de parênteses:
Realmente depende do que você está usando para o OR. Você tem Paid_Out_Amount maior que 50 ou Paid_Out_Amount é como N% Filter%. Adicione alguns colchetes à sua cláusula
Parece que falta um conjunto de colchetes:
Você também precisa olhar para aquele comando LIKE - atualizou o código para definir todos os comentários para minúsculas e pesquisar o filtro de palavras.
Verifique também o comando BETWEEN para seu cheque Paid_Out_Datetime
AND
tem precedência sobreOR
. Você precisa agrupar suas condições se quiser controlar a precedência. Experimente isto:Eu juntei um monte de suas sugestões e saí com o acima. Isso funciona. Obrigado!
Tente com a seguinte consulta:
você precisa colocar a primeira parte da cláusula where (até 'OR') entre parênteses.
Leave a Reply