2017-10-09 77 views
0
SELECT (
    (SUM(t_price) - SUM(a_dvpay)) - (
     SELECT SUM(inst_amount) 
     FROM installment 
     WHERE uid = user_info.uid 
    )   
) AS remaining 
FROM user_info 
WHERE faculty_id = @faculty_id 
GROUP BY uid; 

两行的值,该SQL查询返回多行的剩余结果。我想总结剩余的值为总剩余的SQL Query Result如何总结在SQL Server

+0

别名的结果,总结该列 –

+1

MySQL和SQL服务器是指不同,请。选择其中的任何一个。 –

+0

预期结果是什么? – Squirrel

回答

0

我发现,返回你所需要的解决方案:

SELECT SUM(remaining) FROM (
    SELECT sum(t_price - a_dvpay) as remaining 
    FROM user_info 
    WHERE faculty_id = 1 
    UNION 
    SELECT -SUM(COALESCE(inst_amount,0)) 
    FROM installment inst 
    WHERE uid IN (SELECT DISTINCT user_info.uid FROM user_info WHERE faculty_id = 1) 
) x 

测试:http://sqlfiddle.com/#!9/e6d341/11

0

因此,这将是installment表内的量(S)的总和,我想并非所有faculty_id下的成员都有记录。为了迎合这一点,我用COALESCEinstallment表处理NULLS

SELECT ui.uid, 
    (SUM(ui.t_price) - SUM(ui.a_dvpay)) - SUM(COALESCE(i.inst_amount, 0)) `remaining` 
FROM user_info ui 
    LEFT JOIN installment i ON i.uid = ui.uid 
WHERE faculty_id = @faculty_id 
GROUP BY ui.uid; 
+0

faculty id在所有情况下都是相同的'1'..但是您的查询给出了与我的期望不同的结果。 –

+0

您可以使用您提供的公式进行检查,我只是复制您在问题中使用的公式 – Avidos

1

删除GROUP BY子句。

SELECT ((sum(t_price) - sum(a_dvpay))-(select sum(inst_amount) from installment where uid=user_info.uid)) as remaining FROM user_info WHERE (faculty_id = @faculty_id)**strong text**