我想选择PL类别52105下的交易和交易代码9007和9803,但结果是选择除2之外的其他交易代码。我哪里出错了?
FROM [Steward].[dbo].[vwNONFUNDED_RECOMP_04]
WHERE PL_CATEGORY_CATEG_STMT IN ('52105') OR PL_CATEGORY_CATEG_STMT IS NULL AND TRANSACTION_CODE_STMT IN ('9007', '9803') AND REVERSAL_MARKER_STMT NOT LIKE ('R')
order by BOOKING_DATE_STMT
它的优先顺序使得
OR
语句后面的所有内容都被视为如此。
请尝试以下操作,使用括号强制排序:
WHERE (PL_CATEGORY_CATEG_STMT IN ('52105') OR PL_CATEGORY_CATEG_STMT IS NULL) AND TRANSACTION_CODE_STMT IN ('9007', '9803') AND REVERSAL_MARKER_STMT NOT LIKE ('R')
请注意参与
OR
子句的两个语句周围的两个括号。
考虑这样重写:
FROM [Steward].[dbo].[vwNONFUNDED_RECOMP_04]
WHERE TRANSACTION_CODE_STMT IN ('9007', '9803') AND REVERSAL_MARKER_STMT NOT LIKE ('R') AND (PL_CATEGORY_CATEG_STMT IN ('52105') OR PL_CATEGORY_CATEG_STMT IS NULL)
order by BOOKING_DATE_STMT
您可能想看看您是如何编写“不喜欢”的,它应该包含通配符,具体取决于您希望它实现的目标
例如,不像 ('R%') - 其中 R 不开始文本