2015-05-25 56 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 –

相關問題