SQL 在 select 中用 select 创建列,然后用另一列减去它,以创建一个新列

SQL create column with select in select and subtract this with another column, to create a new column

我是 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

现在我想从'amount'(这是需要支付的贡献)中减去'payed'(实际支付)。

我尝试在其他部分引用“付费”并减去它,但如果我是正确的,你不能在 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 函数的小问题,它应该将 'payed' 列中的“null”更改为 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

about isnull,请告知您使用的是哪个数据库。每个数据库对此都有不同的功能。我用它代替了 coalesce 函数,但它可能在您的数据库中不可用。