我想做一个if语句,以不过滤掉那些NULL idBillingTransaction

就像这样,如果idBillingTransaction不为null,则为daterange,否则idBillingTransactions中的日期范围应该没有过滤器(因为它具有null)

这是代码

select *
from subscription cs
  LEFT JOIN
  billing_transaction bt
    ON CONVERT(cs.msisdn USING latin1) = bt.msisdn

    where
      bt.idBillingTransaction
      BETWEEN (SELECT idBillingTransaction
               FROM transaction_ids
               WHERE dt = '2017-03-31')
      AND (SELECT idBillingTransaction
           FROM transaction_ids
           WHERE dt = '2017-04-30')

最佳答案

我认为您只需修改WHERE子句而不删除NULL id帐单交易,就可以得到想要的东西:

SELECT *
FROM subscription cs
LEFT JOIN billing_transaction bt
    ON CONVERT(cs.msisdn USING latin1) = bt.msisdn
LEFT JOIN transaction_ids t
    ON bt.idBillingTransaction = t.idBillingTransaction AND
       t.dt BETWEEN '2017-03-31' AND '2017-04-30'


我还删除了WHERE子句中的两个子查询,因为我认为它们不是必需的。取而代之的是,仅对ID计费交易记录进行另一个联接到transaction_ids表,然后比较日期范围会更清洁。

10-01 12:19