也许是这样的?
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'这是正确的吗? –