2017-09-15 29 views
0

我有一个数据表有两个交易类型'购买'和'退款'具有唯一的交易ID。过滤SQL查询条件购买与退款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 
+0

你可以发布你的表结构和一些示例数据集吗? –

回答

0

从我了解你的表有这4个主要栏目 - T_ID,t_type,量,R_ID。

根据我,你需要添加另一列 - '退款状态'(r_status)。它只能有三个值 - 交易类型购买的“N.A”。 “退款”和“空”用于交易类型退款。 For this table- 现在,您只想显示交易类型为购买的交易的详情以及退款状态。这个查询是 -

SELECT(@a:= t_id)as tr_id,(select if(t_id =(SELECT @b:= r_id来自事务,其中t_id> @a LIMIT 1),(从事务中选择r_status其中r_id = @ b),'N.A'))作为交易WHERE中的refund_status t_type =“购买”

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

This is the result of query

+0

非常感谢。这正是我想要它工作的原因。 – Rudra

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 
+0

它说错误的语法附近CASE – Rudra

+0

@Rudra对不起,你可以尝试最新的编辑? – RRK