使用退款ID筛选购买的SQL查询条件

时间:2017-09-15 14:23:29

标签: mysql

我有一个数据表,它有两种交易类型'购买'和'退款'它具有唯一的交易ID。

退款还有一个名为'退款ID'这实际上是特定购买的交易ID。 (假设有一笔交易ID为100的购买,因此退款时,交易ID为101,退款ID为100)。

现在在我的查询中,我想只显示交易类型购买,但我想添加一个字段,如果特定购买已退款,则应显示为已退款,如果尚未退款,则该列应为空。

我写的查询是显示数据:

SELECT Transaction_ID, Amount, Transaction_Type, Transaction_Date, Refund_ID
FROM Transaction 
WHERE Transaction_Status = 'OK'
ORDER BY Transaction_Date desc

2 个答案:

答案 0 :(得分:0)

您可以使用CASE WHEN进行检查。

SELECT Transaction_ID, Amount, Transaction_Type, Transaction_Date, Refund_ID,
       CASE WHEN IFNULL(Refund_ID, '') <> ''
       THEN 'Refunded'
       ELSE NULL
       END AS RefundStatus
FROM Transaction 
WHERE Transaction_Status = 'OK'
ORDER BY Transaction_Date desc

答案 1 :(得分:0)

从我的理解,你的表有这4个主要栏目 - t_id,t_type,amount,r_id。

据我说,您需要添加另一列 - “退款状态”(r_status)。它只能有三个值 - “N.A”用于交易类型购买。交易类型退款的“退款”和“空”。 very easy way 现在,您只想显示购买交易类型的交易的详细信息以及退款状态。对此的查询是 -

SELECT(@a:= t_id)as tr_id,(select if(t_id =(SELECT @b:= r_id from transaction t_id&gt; @a LIMIT 1),(从事务中选择r_status,其中r_id = @b), 'N.A'))作为来自交易的退款_status WHERE_type =“购买”

如果可能有点混乱。让我解释一下,首先选择交易ID并将其存储在'a'中,然后通过检查当前行的交易ID是否等于下一行的退款ID来选择退款状态,如果是,则会显示退款退款ID的状态,如果没有,则会显示NA。

distributed ResNet example