首页 > 解决方案 > 同一列上的 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)

标签: sqlsql-server

解决方案


您的查询很好,但我更喜欢将其表述为:

WHERE f.OID = 16 AND
      f.CustomerNum = 1234 AND
      f.TransactionDate > @Date AND
      (cus.LinkDate IS NULL OR f.TransactionDate >= cus.Linkdate)

我发现这更好地传达了逻辑的意图。


推荐阅读