sql - 同一列上的 WHERE 条件
问题描述
我有一个以下查询,它在同一字段上有多个条件。它工作正常,但不确定这是否是正确的方法。
我想显示某个日期的所有交易,如果客户有链接日期,那么忽略在链接日期之前完成的交易。
DECLARE @Date DATETIME = '2019/03/09 00:01:57.000'
SELECT
f.[OID] ,
f.[CustomerNum] ,
f.[Amount] ,
f.[TransactionDate] ,
cus.Linkdate
FROM [Transaction] f
INNER JOIN dbo.Customer cus ON cus.CusNum = f.CustomerNum AND cus.OID = f.OID
WHERE f.OID = 16 AND f.CustomerNum = 1234
AND f.TransactionDate > @Date
AND f.TransactionDate >= ISNULL(cus.Linkdate,@Date)
解决方案
您的查询很好,但我更喜欢将其表述为:
WHERE f.OID = 16 AND
f.CustomerNum = 1234 AND
f.TransactionDate > @Date AND
(cus.LinkDate IS NULL OR f.TransactionDate >= cus.Linkdate)
我发现这更好地传达了逻辑的意图。
推荐阅读
- java - 十进制递归将整数转换为字符串
- android - java.lang.IllegalStateException: 预期 BEGIN_OBJECT 但 BEGIN_ARRAY 改造,kotlin
- sql - 使用proc sql在表中创建新列,需要将其他四列相乘
- javascript - angular8 组件没有显示它的 html?
- python - 仅使用抽象列表函数将字符串中的每个字母乘以其在字符串中的位置(从 1 开始)
- python - 如何在python中从文件中绘制多个图像?
- heroku - git push to heroku 要求登录但给我错误
- javascript - 是否可以将承诺中的值存储到外部变量
- laravel - 生产服务器上不存在但本地计算机上存在的文件路径的 UnexpectedValueException
- react-native - react-native-material-menu 的宽度不起作用