我有一个 预定义的一组过滤条件,如果表达式证明为真,则应排除记录。 例如:排除贸易状态为“ MAT”的记录,并排除投资组合为IN的记录(“假设”,“ HDLTV”)。 AND函数不起作用,因为它会在两个条件都为真的情况下查找记录。 OR功能不会 之所以起作用,是因为如果一条记录被一个记录保存为真,而另一个记录不被保存,那么它将返回记录。
是否有某种方法可以排除针对多个条件满足过滤条件的记录。目的是从原始数据集中过滤掉不需要的记录。在下面的查询中,im只是想首先获取被排除的人口,只是为了进行尝试。非常感谢您的帮助。
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]
答案 0 :(得分:0)
我认为您想要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
值,则逻辑可能会稍微复杂些。