T-SQL вложенные операторы where [закрыто]

Вопрос или проблема

Мой текущий код выглядит следующим образом:

Where(facility <> '2' and bill not in ('1', '2') and rev <> '01')

Я хочу, чтобы он отбирал ТОЛЬКО результаты, где все 3 из этих условий совпадают по строке/записи, но это, похоже, не работает. Спасибо!

Я попробовал код выше. Но это не сработало. Он удалил те строки, где любое из этих условий истинно.

.

Ответ или решение

Для эффективного фильтрации данных в T-SQL с использованием условий WHERE помимо того, что вы упомянули, важно правильно структурировать логические выражения. В вашем примере у вас есть три условия:

  1. facility <> ‘2’ — это условие проверяет, что поле facility не равно ‘2’.
  2. bill NOT IN (‘1’, ‘2’) — это условие исключает записи, в которых поле bill равно ‘1’ или ‘2’.
  3. rev <> ’01’ — это условие проверяет, что поле rev не равно ’01’.

Исходя из вашего описания, вы хотите вернуть только те строки, которые соответствуют всем трем условиям одновременно. Для этого необходимо использовать оператор AND между условиями. Ваше текущее выражение выглядит правильно, и если фильтрация не срабатывает, возможно, проблема заключается в других частях вашего запроса или в исходных данных.

Вот правильный пример использования:

WHERE facility <> '2' 
  AND bill NOT IN ('1', '2') 
  AND rev <> '01'

Этот запрос должен вернуть только те строки, где все три условия выполняются одновременно.

Возможные причины, по которым запрос может не работать как ожидается:

  1. Формат данных: Убедитесь, что данные в базе данных имеют правильный формат и типы. Например, сравнение строк с числами может привести к неверным результатам.

  2. Проверка данных: Возможно, в вашей таблице нет строк, которые соответствуют всем условиям одновременно. Попробуйте выполнить каждое условие отдельно, чтобы понять, какие данные у вас есть.

  3. Пробелы и регистры: Проверьте наличие пробелов в значениях. В некоторых ситуациях строки могут выглядеть одинаково, но содержать скрытые пробелы, которые мешают корректному сравнению.

  4. Логика фильтрации: Если вам необходимо исключить строки, не соответствующие всем указанным критериям, убедитесь, что вы их записали корректно и не используете дополнительные условия, которые могут логически противоречить друг другу.

Попробуйте выполнить следующий запрос, чтобы проверить каждое состояние по отдельности:

-- Проверяем отдельные условия
SELECT *
FROM YourTable
WHERE facility <> '2';

SELECT *
FROM YourTable
WHERE bill NOT IN ('1', '2');

SELECT *
FROM YourTable
WHERE rev <> '01';

Если фильтрация по каждому из трех условий успешно возвращает строки, но объединённый запрос — нет, вероятно, проблема в том, что в выборке нет строк, удовлетворяющих сразу всем трём условиям.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...