Исключение записей на основе критериев множественных фильтров - SQL Access - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть предопределенный набор критериев фильтра, который должен исключать записи, если выражение оказывается истинным.Пример: Исключить записи, в которых Торговый статус = 'MAT', и исключить записи, в которых Портфолио имеет значение IN ('Предположить', 'HDLTV').Функция AND не работает, потому что она будет искать записи, в которых выполняются оба условия.Функция ИЛИ не будет работать, потому что, если запись поддерживается одной, а другой нет, то она вернет запись.

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

Trade ID    Trade Status    Trade Type  Portfolio
             VER            BondForward HD7
             VER           BondForward  HD7
             VER               EQOPT    HD7
             VER               EQOPT    HD7
 82689       VER              FUTURE    INCOMFLEX
 82104       VER              FUTURE    CAPHEDGE

SELECT HedgeFile.[Trade ID], HedgeFile.[Trade Status], HedgeFile.[Trade Type], HedgeFile.Portfolio FROM HedgeFile WHERE (HedgeFile.[Trade Status] = 'MAT') OR HedgeFile.[Portfolio] IN ('ASSUME', 'HDLTV', 'INCOMFLEX', 'CAPHEDGE') OR (HedgeFile.Hedgecode = 'WSP') OR (HedgeFile.[Trade Type] <> 'FUTURE') order by HedgeFile.[Trade Type]

1 Ответ

0 голосов
/ 20 декабря 2018

Я думаю, что вы хотите not.Один из способов написать это:

SELECT HedgeFile.[Trade ID], HedgeFile.[Trade Status], HedgeFile.[Trade Type], 
HedgeFile.Portfolio
FROM HedgeFile
WHERE (NOT HedgeFile.[Trade Status] = 'MAT') OR
      (NOT HedgeFile.[Portfolio] IN ('ASSUME', 'HDLTV', 'INCOMFLEX', 'CAPHEDGE') OR
      (NOT HedgeFile.Hedgecode = 'WSP') OR
      (NOT HedgeFile.[Trade Type] <> 'FUTURE')
order by  HedgeFile.[Trade Type]

Конечно, вы можете упростить это до:

SELECT HedgeFile.[Trade ID], HedgeFile.[Trade Status], HedgeFile.[Trade Type], 
HedgeFile.Portfolio
FROM HedgeFile
WHERE (HedgeFile.[Trade Status] <> 'MAT') OR
      (HedgeFile.[Portfolio] NOT IN ('ASSUME', 'HDLTV', 'INCOMFLEX', 'CAPHEDGE') OR
      (HedgeFile.Hedgecode <> 'WSP') OR
      (HedgeFile.[Trade Type] = 'FUTURE')
order by  HedgeFile.[Trade Type];

Логика может быть немного более сложной, если любой из столбцов может взять на себя NULL значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...