2015-05-25 58 views
0

我在SQL新我有一个关于我的代码的问题,如图下: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 

现在我会像从'金额'(这是需要支付的贡献)中减去“支付”(实际支付)。

我试着引用其他部分中的“payed”并将其减去,但如果我是正确的,则不能引用SQL中的别名。 我也尝试添加另一种选择中选择:

(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.但是像这样实现它不起作用。

感谢您查看我的代码。如果你需要更多的信息,请问,我对此很新,所以我可能会错过显而易见的事情。

+0

您正在使用哪些DBMS?对于标识符使用单引号('AS'仍有待支付')是无效的(标准)SQL。 –

+0

Microsoft SQL服务器管理工​​作室。感谢您的编辑。我调整了我的代码中的单引号。 –

回答

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,请告知你正在使用的数据库。每个数据库都有不同的功能。我用它代替了coalesce函数,但它可能在你的db中不可用。

+1

感谢您的快速反馈!我在你的select中使用了select方法,并且大部分它都在工作。我仍然有一些小问题,但我会自己弄清楚。非常感谢您 –

+0

Coalese不在我的数据库中工作(无法弄清它是什么类型的......),我会用isnull尝试更多的东西。再次感谢。 –

+0

np。请运行以下SQL并告诉我们结果以帮助您使用isnull和coalesce:选择@@ version –

相关问题