2016-01-08 30 views
1

我有一個表4列customerID,AmountByItem,amountToPay和availableAmount 下面是一個虛擬數據,它顯示了我想實現的。給定客戶的金額和每個客戶的可用金額。更新表使用自加入

客戶Amount_Per_Item Available_Amount Outstanding_Amount

 x  50,000 70,000  - 
     x  20,000 70,000  - 
     y  10,000 50,000  - 
     y  40,000 50,000  - 
     y  30,000 50,000  30,000 
     z  90,000 150,000  - 
     z  70,000 150,000  10,000 

客戶x具有70 000與他有能力支付所有到期的金額可用金額。但是,客戶y有50 000,而他必須支付80 000.因此,他剩餘的應付金額爲30 000.同樣,客戶z的到期金額爲10000. 我想避免使用光標來更新未付金額。查找每件商品的到期金額檢查可用金額並更新未付金額。我想用自聯接來更新這張表。任何幫助將不勝感激

回答

0

試試這個

create table TransactionTable 
(
Customer varchar(50) null, 
Amount_Per_Item int Null, 
Available_Amount int null, 
Outstanding_Amount varchar(50) null 
) 

insert into TransactionTable values 
('x',50000,70000,null), 
('x',20000,70000,null), 
('y',10000,50000,null), 
('y',40000,50000,null), 
('y',30000,50000,null), 
('z',90000,150000,null), 
('z',70000,150000,null) 


update t1 set t1.Outstanding_Amount=t2.TotalAmountPerItem-t2.TotalAvailableAmount 
from TransactionTable t1 inner join (
select Customer 
,sum(Amount_Per_Item) as TotalAmountPerItem 
,max(Available_Amount) as TotalAvailableAmount 
from TransactionTable 
group by Customer) t2 on t1.Customer=t2.Customer 

select * from TransactionTable 
+0

THX很多的Sudhir先生,在僅存的概率是跨越單個客戶的所有行重複爲30 000例餘額爲客戶Y重複餘額對於所有3行客戶而言,而不是出現在單個客戶的最後一行。 – makababu

+0

好的等待米爲您提供更新 –

+0

請發佈多個代碼的答案;解釋你在做什麼以及爲什麼應該包括在內。 – alroc