一个选项,条件聚合......
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 表达式代替 IF 来实现等效行为...
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