2017-10-09 102 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**