也許是這樣的?
DECLARE @budget_line_id INT = 4;
SELECT
b.budget_line_id,
b.budget_line_name,
CurrentBalance = b.[2017_amount] - te.amount
FROM
dbo.budget_detail b
CROSS APPLY (
SELECT
amount = SUM(e.amount)
FROM
dbo.expenses e
WHERE
b.budget_line_ID = e.budget_line_id
AND e.budget_line_id = @budget_line_id
) te
WHERE
b.budget_line_id = @budget_line_id;
編輯:提供做同樣的事情的2的替代方法。
-- JOIN to a derived table...
SELECT
b.budget_line_id,
b.budget_line_name,
CurrentBalance = b.[2017_amount] - te.amount
FROM
dbo.budget_detail b
JOIN (
SELECT
e.budget_line_id,
amount = SUM(e.amount)
FROM
dbo.expenses e
WHERE
e.budget_line_id = @budget_line_id
GROUP BY
e.budget_line_id
) te
ON b.budget_line_id = te.budget_line_id
WHERE
b.budget_line_id = @budget_line_id;
...
-- Correlated sub-query in the SELECT...
SELECT
b.budget_line_id,
b.budget_line_name,
CurrentBalance = b.[2017_amount]
- (SELECT
amount = SUM(e.amount)
FROM
dbo.expenses e
WHERE
b.budget_line_ID = e.budget_line_id
AND e.budget_line_id = @budget_line_id
)
FROM
dbo.budget_detail b
WHERE
b.budget_line_id = @budget_line_id;
有兩個表中一個budget_line_id = 4?另外,這聽起來像你可能想要做b [2017_amount] - 總和(e.amount),而不是...順便說一句,謝謝你與非營利組織合作 – scsimon
你有兩個表中的budget_line_id = 4嗎? 'INNER JOIN'要求它出現在兩個表上,否則它不會返回任何東西。 – Nathan
在桌子'b'你有'budget_line_ID'但在'e'它''budget_line_id'這是正確的嗎? –