2017-06-24 114 views
1

我有這樣如下表:合併多個記錄到一個基於一些條件

payee  | payer | amount 
-----------|-----------|---------- 
USER3  | USER1 | 150.00 
USER3  | USER2 | 50.00 
USER1  | USER3 | 300.00 
USER2  | USER3 | 300.00 
USER3  | USER6 | 100.00 

我想兩個記錄,其中收款人是第二個記錄和付款人的付款相結合是第二記錄的收款人和重新計算的金額。 所以我需要的結果是:

payee  | payer  | amount 
---------- | ------------| --------- 
USER1  | USER3  | 150.00 
USER2  | USER3  | 250.00 
USER3  | USER6  | 100.00 
+0

用您正在使用的數據庫標記您的問題。 –

+0

使用SQL Server 2008 – Tanmoy

回答

1

大多數數據庫least()greatest()功能,所以一個方法是:

select least(payee, payer) as payee, greatest(payee, payer) as payer, 
     sum(case when payee = least(payee, payer) then amount else - amount end) as amount 
from t 
group by least(payee, payer), greatest(payee, payer); 

(在那些沒有可以使用case表達。)

如果你總是想要正數,你可以使用子查詢:

select (case when amount < 0 then payer else payee end) as payee, 
     (case when amount < 0 then payee else payer end) as payer, 
     abs(amount) 
from (select least(payee, payer) as payee, greatest(payee, payer) as payer, 
      sum(case when payee = least(payee, payer) then amount else - amount end) as amount 
     from t 
     group by least(payee, payer), greatest(payee, payer) 
    ) t; 
+0

爲最小和最大我創建用戶定義的函數。它工作完美。 – Tanmoy