2016-04-27 85 views
2

您好,我想將兩個sql語句合併爲一個,因此數據將顯示在一個查詢中。在一個查詢中有兩個sql和,其中有兩個where子句

下面的SQL查詢工作的優良:

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

基本上我想加入他們的行列,因此輸出將是這樣的:

TotalSponsor TotalLoan 
10000   5000 

任何幫助將是讚賞。

感謝

回答

1

您可以用CROSS JOIN兩行合併。通常建議不要這樣做,因爲如果交叉連接每個M行和N行的兩個表格,則會在結果中獲得MxN行(可能是lot),但在這種情況下,您知道M和N是均爲1,所以M×N個也爲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

一種選擇,是有條件的聚合....

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' 

的IF()函數計算所述第一參數作爲布爾值,如果它的計算結果爲TRUE,它返回第二個參數,否則返回第三個參數。

你可以在地方,如果等效行爲的使用CASE表達式...

SUM(CASE WHEN somecondition THEN somevalue ELSE 0 END) 

或者,你可以在外部查詢的SELECT列表中使用sbqueries,是這樣的:

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 

或者,你可以使用查詢作爲行內觀點

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