2017-06-24 4 views
1

Iこの次の表があります。私は、受取人が第二のレコードと支払人の支払者である二つのレコードを結合したいいくつかの条件に基づいて一つに複数のレコードを組み合わせ

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

関連する問題