2017-09-15 74 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