Sql 根据某些条件将多个记录合并为一个记录
我有下表:Sql 根据某些条件将多个记录合并为一个记录,sql,sql-server,join,group-by,Sql,Sql Server,Join,Group By,我有下表: 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
-----------|-----------|----------
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
大多数数据库具有最少和最大的功能,因此一种方法是:
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);
在那些没有的情况下,可以使用大小写表达式
如果始终需要正数,可以使用子查询:
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;
用您正在使用的数据库标记您的问题。使用SQL Server 2008获取我创建的用户定义函数的最小值和最大值。它工作得很好。