Имам заявка, която събира информация въз основа на набор от условия. По принцип искам да знам дали дадено място е изплатило повече от $ 50 за деня ИЛИ в раздела за коментари има думата "филтър" в него ...
Моята заявка е:
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' + '%')
Проблемът е, че връща 460 резултата и трябва да върне само 2.
Всички отговори
Трябва да увиете критериите си Paid_Out_Amoutn и Paid_Out_Comment във втори набор от скоби:
Наистина зависи от това за какво използвате ИЛИ. Имате Paid_Out_Amount е по-голямо от 50 или Paid_Out_Amount е като N% Filter%. Добавете няколко скоби към вашата клауза
Изглежда, че ви липсва един комплект скоби:
Също така трябва да погледнете тази команда LIKE - актуализира кода, за да настроите всички коментари в малки букви и да потърсите филтъра за думи.
Също така проверете командата МЕЖДУ за вашата проверка Paid_Out_Datetime
AND
има предимство предOR
. Трябва да групирате вашите условия, ако искате да контролирате приоритета. Опитайте тази:Свързах куп ваши предложения и излязох с горното. Това работи. Благодаря!
Опитайте със следната заявка:
трябва да приложите първата част от клаузата where (до „ИЛИ“) в паранттеза.
Leave a Reply