2016-09-21 4 views
-1

enter image description here Привет всем У меня есть образец таблицы здесьSQL запросов сервера, используя мультипликатор, где положение

Я использую этот запрос:

SELECT 
    PART_NUMBER, DATE, [WH-IN], [WH-OUT], [END-BAL] 
FROM 
    TABLE1 
WHERE 
    PART_NUMBER = 'TR131305R' 
    AND DATE <= '2016-05-30' 
    AND [WH-IN] = 'W1' 
    OR [WH-OUT] = 'W1' 

Проблема заключается в том, что он также извлечь запись, которая больше, чем ДАТА 2016-05-30

+1

В или превосходит все .... что вы пытаетесь сделать? – markg

ответ

2

Проблема с вашим OR заявление, он будет захватывать любую запись, которая прилипает к этой статье:

PART_NUMBER = 'TR131305R' 
and DATE <= '2016-05-30' 
and [WH-IN] = 'W1' 

или любой соответствующей записи :

OR [WH-OUT] = 'W1' 

это исправить с скобкой:

SELECT PART_NUMBER, DATE, [WH-IN], [WH-OUT], [END-BAL] 
FROM TABLE1 
WHERE PART_NUMBER = 'TR131305R' 
and DATE <= '2016-05-30' 
and ([WH-IN] = 'W1' --wrap this clause in() 
or [WH-OUT] = 'W1') 
+0

Отлично! это очень помогает! Спасибо огромное! – MDP

1

Вам нужно parenthesis

В настоящее время ваша статья запроса Where будет обрабатываться как этот

WHERE (PART_NUMBER = 'TR131305R' and DATE <= '2016-05-30' and [WH-IN] = 'W1') 
or [WH-OUT] = 'W1' 

Поскольку AND имеет более высокий приоритет, то OR. Поэтому используйте скобки для применения фильтра в правильном порядке.

SELECT PART_NUMBER, DATE, [WH-IN], [WH-OUT], [END-BAL] 
FROM TABLE1 
WHERE PART_NUMBER = 'TR131305R' 
and DATE <= '2016-05-30' 
and ([WH-IN] = 'W1' or [WH-OUT] = 'W1') 

или вы можете обратить IN оператор

SELECT PART_NUMBER, DATE, [WH-IN], [WH-OUT], [END-BAL] 
FROM TABLE1 
WHERE PART_NUMBER = 'TR131305R' 
and DATE <= '2016-05-30' 
and 'W1' in ([WH-IN] , [WH-OUT]) 
+0

Отлично! это очень помогает! Спасибо огромное! – MDP

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