2017-07-03 102 views
0

我想在SQL中編寫一個查詢來計算賬戶之間轉賬的淨錢。在一個名爲Transactions的表中我有我的測試數據如下。爲賬戶之間的淨交易查詢

Debit | From | To | Amount 
--------------------------------- 
1  | ABC | BBC | $50 
0  | BBC | ABC | $150 
1  | ABC | CBC | $200 
0  | CBC | ABC | $150 
1  | ABC | EBC | $100 

我的輸出應爲如下以上測試數據:

From | To | Amount 
-------------------------- 
BBC | ABC | $100 
ABC | CBC | $50 
ABC | EBC | $100 
+0

看到這裏瞭解更多如何改進問題:https://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ – TheGameiswar

+0

看看https://stackoverflow.com/help/mcve –

+0

我剛剛更新了這個問題。請檢查並幫助我。提前感謝您的幫助。 –

回答

1

這是一種方法

DECLARE @SampleData AS TABLE 
(
    Debit bit, 
    [From] varchar(10), 
    [To] varchar(10), 
    Amount int 
) 

INSERT INTO @SampleData 
(
    Debit, 
    [From], 
    [To], 
    Amount 
) 
VALUES 
(1, 'ABC', 'BBC', 50), 
(0, 'BBC', 'ABC', 150), 
(1, 'ABC', 'CBC', 200), 
(0, 'CBC', 'ABC', 150), 
(1, 'ABC', 'EBC', 100) 

;WITH temp AS 
(
    SELECT sd.[From], sd.[To], sd.Amount   
    FROM @SampleData sd 
    WHERE sd.Debit = 1 
    UNION ALL 
    SELECT sd.[To], sd.[From], -sd.Amount 
    FROM @SampleData sd 
    WHERE sd.Debit = 0 
) 
SELECT CASE WHEN sum(t.Amount) > 0 then t.[From] ELSe t.[To] End as [From], 
     CASE when sum(t.Amount) <= 0 then t.[From] ELSe t.[To] End as [To], 
     ABS(sum(t.Amount)) AS Amount 
FROM temp t 
GROUP BY t.[From], t.[To] 

返回

From To Amount 
---------------------- 
BBC  ABC 100 
ABC  CBC 50 
ABC  EBC 100 
+0

非常感謝。它解決了我的問題。非常感謝您的快速響應 –

+0

如果有幫助,然後將其標記爲答案。 – TriV