2016-04-27 2 views
2

Привет, я хочу объединить два оператора sql в один, чтобы данные отображались в одном запросе.Две суммы sql в одном запросе с двумя предложениями

Ниже 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 в результате (который может быть лот), но в этом случае вы знаете, что M и N являются как 1, так что MxN также 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' 

ПЧ функции() вычисляет первый аргумент как логическое значение, если он имеет значение TRUE, он возвращает второй аргумент, иначе он возвращает третий аргумент.

Вы можете использовать выражение CASE, вместо IF для эквивалентного поведения ...

SUM(CASE WHEN somecondition THEN somevalue ELSE 0 END) 

Или, вы можете использовать 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 
Смежные вопросы