根据多个筛选条件 - SQL访问排除记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据多个筛选条件 - SQL访问排除记录相关的知识,希望对你有一定的参考价值。

我有一组预定义的过滤条件,如果表达式证明为真,则应排除记录。例如:排除交易状态='MAT'的记录并排除投资组合为IN的记录('假设','HDLTV')。 AND函数不起作用,因为它会查找两个条件都为真的记录。 OR函数也不起作用,因为如果一个记录由一个而不是另一个保持为真,那么它将返回记录。

是否有某种方法可以排除多个条件满足过滤条件的记录。目标是从原始数据集中过滤掉不需要的记录。在下面的查询中,我只想尝试排除被排除的人口,只是为了尝试一下。任何帮助深表感谢。

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]

答案

我想你想要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值,则逻辑可能稍微复杂一些。

以上是关于根据多个筛选条件 - SQL访问排除记录的主要内容,如果未能解决你的问题,请参考以下文章

在sql数据库中如何筛选以日期为条件的记录

SQL 与,或,非

mysql筛选条件,求高手

SQL_(AND,OR,NOT)与或非

mysql 多个条件的删除一条记录的语句

sql 符合两个条件的数据给筛选出来