2017-06-24 73 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