【问题标题】:Excluding Records based on Multiple Filter Criteria- SQL Access基于多个过滤条件的排除记录 - SQL 访问
【发布时间】:2018-12-20 19:03:07
【问题描述】:

我有一个 如果表达式证明为真,则预定义的一组过滤条件应排除记录。 例如:排除交易状态 = 'MAT' 的记录并排除投资组合为 IN 的记录('Assume'、'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]

【问题讨论】:

    标签: sql ms-access filter


    【解决方案1】:

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

    【讨论】:

    • 由于 OR 的原因,这不起作用。假设第一个过滤器排除了一些记录,但是下一个语句中的 OR 语句可以将它们立即带回来。不确定这是否有意义。你认为在这里加入会更合适吗?
    猜你喜欢
    • 2022-07-21
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多