我是SQL的新手,我对我的代码有疑问,如下所示:
SELECT membernummer, name, c.ammount, c.terms,
(select SUM(isnull(amount, 0))
from payments p where m.member_ID = p.member_ID and p.year = c.year) AS payed
From member m
INNER JOIN contribution c ON m.member_ID = c.member_ID
where c.year = 2014
现在,我想从“数额”(这是需要支付的费用)中减去“付款”(实际付款)。
我试着提到'所许'在其他部分并减去它,但如果我是正确的,你不能在SQL中引用别名。 我还尝试在select中添加另一个select:
(select SUM(isnull(amount, 0))
from payments p
where m.member_ID = p.member_ID
and p.year = c.year) - sum(amount) AS 'still to be payed'
这只是给我一个错误。
我的代码中也有一个关于ISNULL函数的小问题,它应该改变'空'在付款的'列到0.但是这样实现它不起作用。
感谢您查看我的代码。如果您需要更多信息,请询问,我对此很新,所以我可能会错过明显的事情。
答案 0 :(得分:0)
如果我理解得很好,我认为这是你正在寻找的:
SELECT,membernummer, name, c.ammount, c.terms, payed_sum, amount_sum, amount_sum - payed_sum balance
from (
SELECT membernummer, name, c.ammount, c.terms,
(select SUM(coalese(amount, 0)) from payments p where m.member_ID = p.member_ID and p.year = c.year) AS amount_sum,
(select SUM(colasce(payed, 0)) from payments p where m.member_ID = p.member_ID and p.year = c.year) AS payed_sum
From member m INNER JOIN contribution c ON m.member_ID = c.member_ID where c.year = 2014
) calc
关于isnull,请告知您正在使用的数据库。每个数据库都有不同的功能。我将它替换为合并函数,但它可能在您的数据库中不可用。