2016-04-27 8 views
2

Hallo, ich möchte zwei SQL-Anweisungen in einem zu verbinden, so dass Daten in einer Abfrage angezeigt werden.Zwei SQL-Summen in einer Abfrage mit zwei Where-Klauseln

Die folgende SQL-Abfragen funktionieren:

SELECT SUM(CAST(CAST(Amount AS float) AS INT)) AS TotalSponsor 
FROM Fees WHERE(Sponsor = 'True') 

&

SELECT SUM(CAST(CAST(Amount AS float) AS INT)) AS TotalLoan 
FROM Fees WHERE(StudentLoan = 'True') 

Im Grunde möchte ich sie verbinden, so wird die Ausgabe wie:

TotalSponsor TotalLoan 
10000   5000 

Jede Hilfe wäre geschätzt.

Dank

Antwort

1

Sie können die beiden Zeilen mit einem CROSS JOIN kombinieren. Dies wird normalerweise empfohlen, denn wenn Sie zwei Tabellen mit M- und N-Zeilen verbinden, erhalten Sie MxN-Zeilen im Ergebnis (das kann ein Los sein), aber in diesem Fall wissen Sie für Tatsache, dass M und N sind beide 1, so MxN ist auch 1.

SELECT * 
FROM (
    SELECT SUM(CAST(CAST(Amount AS float) AS INT)) AS TotalSponsor 
    FROM Fees WHERE(Sponsor = 'True') 
) AS x 
CROSS JOIN (
    SELECT SUM(CAST(CAST(Amount AS float) AS INT)) AS TotalLoan 
    FROM Fees WHERE(StudentLoan = 'True') 
) AS y 
1

eine Option ist bedingte Aggregation ....

SELECT SUM(IF(f.Sponsor ='True',CAST(CAST(Amount AS float) AS INT),0)) AS TotalSponsor 
    , SUM(IF(f.StudentLoan='True',CAST(CAST(Amount AS float) AS INT),0)) AS TotalLoan 
    FROM Fees f 
WHERE f.Sponsor = 'True' 
    OR f.StudentLoan = 'True' 

die IF() Funktion wertet das erste Argument als boolean, wenn sie ausgewertet TRUE, gibt das zweite Argument zurück, andernfalls das dritte Argument.

Sie könnten einen CASE-Ausdruck anstelle von IF für gleichwertiges Verhalten verwenden ...

SUM(CASE WHEN somecondition THEN somevalue ELSE 0 END) 

Oder Sie sbqueries in der SELECT-Liste einer äußeren Abfrage, so etwas wie diese verwenden:

SELECT (SELECT SUM(CAST(CAST(Amount AS float) AS INT)) 
      FROM Fees 
      WHERE(Sponsor = 'True') 
     ) AS TotalSponsor 
    , (SELECT SUM(CAST(CAST(Amount AS float) AS INT)) 
      FROM Fees 
      WHERE(StudentLoan = 'True') 
     ) AS TotalLoan 

Oder könnten Sie die Abfragen als Inline-Ansichten verwenden

SELECT s.TotalSponsor 
    , l.TotalLoan 
    FROM (SELECT SUM(CAST(CAST(Amount AS float) AS INT)) AS TotalSponsor 
      FROM Fees WHERE(Sponsor = 'True') 
     ) s 
CROSS 
    JOIN (SELECT SUM(CAST(CAST(Amount AS float) AS INT)) AS TotalLoan 
      FROM Fees WHERE(StudentLoan = 'True') 
     ) l 
Verwandte Themen