我想做一个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
表,然后比较日期范围会更清洁。