2017-06-24 3 views
1

Kombination Ich habe dies folgende Tabelle:mehrere Datensätze in einer basierend auf einer Bedingung

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

ich zwei Datensätze kombinieren möchten, wo Zahlungsempfänger Zahler der zweite Datensatz ist und Zahler der Zahlungsempfänger der zweiten Platte ist und die Menge neu berechnen . Also mein gewünschtes Ergebnis ist:

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

Markieren Sie Ihre Frage mit der von Ihnen verwendeten Datenbank. –

+0

mit SQL Server 2008 – Tanmoy

Antwort

1

Die meisten Datenbanken haben least() und greatest() Funktionen, so eine Art und Weise ist:

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); 

(In den Ländern, die Sie keinen case Ausdruck verwenden können.)

Wenn Sie immer positive Zahlen möchten, können Sie eine Unterabfrage verwenden können:

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

für die kleinste und größte Ich habe benutzerdefinierte Funktion erstellt. Es hat perfekt funktioniert. – Tanmoy

Verwandte Themen