2015-05-13 3 views
0

Я пытаюсь написать SQL-запрос для MS Access 2010, чтобы выбрать любую комбинацию из 6 полей. Я написал 63 возможных сочетания в свой запрос, каждый из которых заключен в квадратные скобки и разделен OR. Внутри каждого из них присоединяется И. Кроме того, для каждого поля задается запрос от пользователя.Access 2010 SQL: множественное условие, где предложение не фильтруется правильно

Проблема, с которой я сталкиваюсь, заключается в том, что если я ввожу параметры для (пример) полей A, B и C, я получаю только отфильтрованные значения для A и B, тогда как запрос отображает элементы, которые не соответствуют критериям параметров ,

Пример кода:

`SELECT Main.DISPATCHER, Main.DateCall, Main.Status, Main.[Pick Up 20], Main.[Drop Off 20], Main.Shift, Main.Day, Main.Time, Main.[Call Type], Main.[ETA Given], Main.ZONE, Main.Priority, Main.Comments, Main.DODept, Main.ID, Main.PU, Main.DO, Main.[Pick Up], Main.Caller, Main.DropOff 
FROM Main 
WHERE (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.Shift=[What shift?AM/PM] 
     AND Main.DISPATCHER=[Which Dispatcher?Ex Justin]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
    AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
    AND Main.Status=[Status: ACCEPTED or DECLINED?] 
    AND Main.Shift=[What shift?AM/PM] 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex jUSTIN] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.Status=[Status: ACCEPTED or DECLINED?]) 
    OR (Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 
    OR (Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.Status=[Status: ACCEPTED or DECLINED?] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.[Pick Up 20]=[What Pick Up?Use Facility List]) 
    OR (Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
     AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.[Drop Off 20]=[What Drop Off?-Use Facility List] 
     AND Main.Shift=[What shift?AM/PM]) 
    OR (Main.Shift=[What shift?AM/PM]);` 

Любая помощь/логика будет весьма признателен. Благодарю.

+0

jeezus, все эти '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – Lamak

+0

Его единственный способ, которым я мог думать/находить потенциально для получения желаемых результатов – atomedic

+0

Являются ли какие-либо из столбцов базы данных NULL? Сравнение с NULL не работает как обычная логическая логика. – Jay

ответ

0

Да, это не очень эффективный способ поиска. Я имею в виду, это:

OR (Main.Status=[Status: ACCEPTED or DECLINED?]) 
OR (Main.Status=[Status: ACCEPTED or DECLINED?] 
    AND Main.[Pick Up 20]=[What Pick Up?Use Facility List] 
    AND Main.[Drop Off 20]=[What Drop Off?-Use Facility List]) 

логически эквивалентен только это:

OR (Main.Status=[Status: ACCEPTED or DECLINED?]) 

Тогда в середине вы имеете кучу и заявлений.

[...] 
OR Main.DISPATCHER=[Which Dispatcher?Ex Justin] 
AND Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] 
AND Main.Status=[Status: ACCEPTED or DECLINED?] 
AND Main.Shift=[What shift?AM/PM] 
OR [...] 

И это будет в основном отменять все остальное, что у вас есть. Все Эти условия должны быть удовлетворены.

Предположим, что если вы не отправите поле, значение которого будет равно NULL. Предположим также, что вы должны представить обе даты для диапазона дат вызова. Чтобы сделать полный поиск, вы можете сделать это:

WHERE (Main.DISPATCHER=[Which Dispatcher?Ex Justin] OR [Which Dispatcher?Ex Justin] IS NULL) 
    AND (Main.DateCall BETWEEN [Enter Start Date:] AND [Enter Ending Date:] OR [Enter Start Date:] IS NULL OR [Enter Ending Date:] IS NULL) 
    AND (Main.Status=[Status: ACCEPTED or DECLINED?] OR [Status: ACCEPTED or DECLINED?] IS NULL) 
    AND (Main.[Pick Up 20]=[What Pick Up?Use Facility List] OR [What Pick Up?Use Facility List] IS NULL) 
    AND (Main.[Drop Off 20]=[What Drop Off?-Use Facility List] OR [What Drop Off?-Use Facility List] IS NULL) 
    AND (Main.Shift=[What shift?AM/PM] OR [What shift?AM/PM] IS NULL) 
+0

Я вижу логику вашего предложения, но теперь он возвращает все результаты. Я попытался ввести несколько комбинаций параметров, все из которых включали даты начала и окончания. – atomedic

+0

@atomedic Боюсь, что я не знаю, потому что, если вы не пропустили круглые скобки где-нибудь, что должно работать. Я бы начал, устраняя все, кроме одного или двух из самых простых условий (т. Е. Просто подобрать 20 и скинуть 20) и заставить его работать на это. Это должно сказать вам, как должно быть написано условие. –

+0

Удалил скобку из последней строки и вложил все предложение where в другой набор скобок и начал работать! Большое спасибо Bacon Bits. – atomedic

Смежные вопросы