sql - Trying to Update one table with another table -
i have ledger table following 3 columns along others not included brevity:
**gl_account id** | **gl_amount** | **gl_adjustmentamount** 9500 | null | null ... | ... | ...
i have different adjustment table differing columns above except two:
**gl_account id** | **gl_adjustmentamount** 9500 | 289.84 9500 | 9.63 9500 | 13646.11 9500 | 835.31 9500 | -210 9500 | -1019.02 9500 | -200
i need update ledger table include 7 new gl_adjustments includes 1 of values 289.84.
here code.
update ledgertable set [gl_adjustmentamount] = adjust.gl_adjustmentamount ledgertable genled full outer join adjustmenttable adjust on genled.gl_accountid = adjust.gl_accountid
case 1 : update 1 account
you can use if want 1 account :
declare @accountid int set @accountid = 9500 update ledger set gl_adjustmentamount = gl_adjustmentamount + (select sum(a.gl_adjustmentamount) adjustment a.gl_accountid = @accountid) gl_accountid = @accountid
mind you, accountid
have specified here.
case 2 : update accounts
if want work accounts (which should & more case), need more "generalized" query of sort :
update ledger set gl_adjustmentamount = isnull(gl_adjustmentamount,0) + isnull(collatedadjustments.adjustment, 0) ledger ledger inner join (select a.gl_accountid, sum(a.gl_adjustmentamount) adjustment adjustment adjustments group adjustments.gl_accountid) collated on ledger.gl_accountid = collated.gl_accountid
here's some sample data can test against :
create table ledger(gl_accountid int, gl_amount int, gl_adjustmentamount int); create table adjustment(gl_accountid int, gl_adjustmentamount int); insert ledger(gl_accountid,gl_amount, gl_adjustmentamount) values(9500, null, null); insert ledger(gl_accountid,gl_amount, gl_adjustmentamount) values(9600, null, null); insert ledger(gl_accountid,gl_amount, gl_adjustmentamount) values(9700, null, null); insert ledger(gl_accountid,gl_amount, gl_adjustmentamount) values(9800, null, null); insert adjustment(gl_accountid, gl_adjustmentamount) values(9500, 289.84); insert adjustment(gl_accountid, gl_adjustmentamount) values(9500, 9.63); insert adjustment(gl_accountid, gl_adjustmentamount) values(9500, 13646.11); insert adjustment(gl_accountid, gl_adjustmentamount) values(9500, 835.31); insert adjustment(gl_accountid, gl_adjustmentamount) values(9500, -210); insert adjustment(gl_accountid, gl_adjustmentamount) values(9500, -1019.02); insert adjustment(gl_accountid, gl_adjustmentamount) values(9500, -200); insert adjustment(gl_accountid, gl_adjustmentamount) values(9600, 29.84); insert adjustment(gl_accountid, gl_adjustmentamount) values(9600, 29.63); insert adjustment(gl_accountid, gl_adjustmentamount) values(9600, 16646.11); insert adjustment(gl_accountid, gl_adjustmentamount) values(9600, 335.31); insert adjustment(gl_accountid, gl_adjustmentamount) values(9600, -1210); insert adjustment(gl_accountid, gl_adjustmentamount) values(9600, -2019.02); insert adjustment(gl_accountid, gl_adjustmentamount) values(9600, -1200); insert adjustment(gl_accountid, gl_adjustmentamount) values(9700, 2239.02); insert adjustment(gl_accountid, gl_adjustmentamount) values(9700, 1400); insert adjustment(gl_accountid, gl_adjustmentamount) values(9800, 4121.02); insert adjustment(gl_accountid, gl_adjustmentamount) values(9800, 1234);
this query takes previous adjustments (in ledger
table) equation well.
hope helps!!!
Comments
Post a Comment