2016-08-30 5 views
2

Ich möchte die Differenz der Summe der Debit- und Kredittransaktionen des Benutzers herausfinden und sie auflisten. HierFinde den Unterschied der Summe der Spalte für verschiedene Benutzer

ist die Abfrage, die ich ausprobiert haben:

SELECT *, (val1 - val2) 
FROM (SELECT *, sum(transactionAmount) AS val1 
     FROM tableTransaction 
     WHERE creditedToNum = My_Number 
     GROUP BY debtToNum) db 
JOIN (SELECT *, sum(transactionAmount) AS val2 
     FROM tableTransaction 
     WHERE debtToNum = My_Number 
     GROUP BY creditedToNum) Cr 
WHERE db.transactionStatus = 1 
    AND db.isActive = 1; 

Es Rückkehr 0 Zeilen, aber die tatsächliche Ausgabe sollte wie unten
Hier ist meine Tabellenstruktur:

| Amount | Credit_to | Debit_to | 
|--------|-----------|-----------| 
| 2000 | My_Number | Number_1 | 
| 5000 | My_Number | Number_2 | 
| 3000 | Number_1 | My_Number | 
| 4000 | Number_2 | My_number | 
| 2000 | My_Number | Number_2 | 

Was tatsächlichen Ergebnis Ich möchte ist:

| Name  | Amount | 
|----------|--------| 
| Number_1 | 1000 | 
| Number_2 | 3000 | 
+0

Diese Abfrage ist nicht lesbar. Es spielt keine Rolle, wie Ihr Java-Code es erstellt. Zeige das aktuelle SQL. Und was ist das Problem mit der aktuellen Abfrage? –

+0

@ CL. Ich habe meine Anfrage aktualisiert. –

Antwort

1

In Ihrer Abfrage gibt es keine Join-Bedingung.

Statt Beitritt, könnte es eine bessere Idee, ein compound query zu verwenden, um die Daten in eine brauchbare Form zu bringen:

SELECT Credit_to AS Name, Amount 
FROM tableTransaction 
WHERE Debit_to = @My_Number 
UNION ALL 
SELECT Debit_to, -Amount 
FROM tableTransaction 
WHERE Credit_to = @My_Number; 
 
| Name  | Amount | 
|----------|--------| 
| Number_1 | 3000 | 
| Number_2 | 4000 | 
| Number_1 | -2000 | 
| Number_2 | -5000 | 
| Number_2 | -2000 | 

Dann gerade Gruppe es:

SELECT Name, SUM(Amount) AS Total 
FROM (SELECT Credit_to AS other, Amount 
     FROM tableTransaction 
     WHERE Debit_to = @My_Number 
     UNION ALL 
     SELECT Debit_to AS other, -Amount 
     FROM tableTransaction 
     WHERE Credit_to = @My_Number) 
GROUP BY Name 
ORDER BY Name; 
 
| Name  | Total | 
|----------|-------| 
| Number_1 | 1000 | 
| Number_2 | -3000 | 
Verwandte Themen