sql server - SQL query multiplying SUM results when joining to multiple transaction tables -
i'm developing report measures cash performance based on allocation , cancellation dates. measure i've queried transactions sub query pulls transactions , joined on account number , transaction , dates. summed @ top of query.
all works fine when using 1 sub query i'm having add transactions sub query; 1 calculate actual payments allocation date (to cancellation date or today if value null) , 2nd calculate cancelled payments allocation date + 14 days (to cancellation date or today if value null).
the first sub query works i've added second it's multiplying summed value 8. i've had in past when trying query table twice. (not 8). ideas?
thanks
the sums totalling these (test1 works fine, test2 not much) , sub queries:
sum(case when v1.[transaction date1] >= dateadd(dd, 1, eomonth(getdate(), -1)) v1.[payments] else 0 end) test1, sum(case when v2.[transaction date2] >= dateadd(dd, 1, eomonth(getdate(), -1)) v2.[payments2] else 0 end) test2, my code:
left join (select [account number1], [transaction date1], sum([payments1]) [payments] (select accountno [account number1], trandt [transaction date1], case when transactiontype = 'credit' tranamt * -1 else tranamt end [payments1] transactions t (nolock) join transactiondetails td (nolock) on td.transactionid = t.transactions1 join transactions (nolock) on a.id = transactions1 , [trantype] '%pay%' , [tranamt] <> 0 inner join accounts na (nolock) on a.accountid = accounts1 transactiontype = 'credit') v group [account number1], [transaction date1]) v1 on maint.[accno] = v1.[account number1] , maint.[allocation date] <= v1.[transaction date1] , v1.[transaction date1] <= maint.[transaction date] left join (select [account number2], [transaction date2], sum([payments2]) [payments2] (select accountno [account number2], trandt [transaction date2], case when transactiontype = 'credit' tranamt * -1 else tranamt end [payments2] transactions t (nolock) inner join transactiondetails td (nolock) on td.transactionid = t.transactions1 inner join transactions (nolock) on a.id = transactions1 , [trantype] '%pay%' , [tranamt] <> 0 inner join accounts na (nolock) on a.accountid = accounts1 transactiontype = 'debit') v group [account number2], [transaction date2]) v2 on maint.[accno] = v2.[account number2] , dateadd(dd,10,maint.[dca allocation date]) <= v2.[transaction date2] , v2.[transaction date2] <= maint.[transaction date]
since inner subselect same in both joins, should put in statement @ top , use twice. this:
with v_cte (select accountno [account number2], trandt [transaction date2], case when transactiontype = 'credit' tranamt * -1 else tranamt end [payments2] transactions t (nolock) inner join transactiondetails td (nolock) on td.transactionid = t.transactions1 inner join transactions (nolock) on a.id = transactions1 , [trantype] '%pay%' , [tranamt] <> 0 inner join accounts na (nolock) on a.accountid = accounts1 transactiontype = 'debit') ... left join (select [account number1], [transaction date1], sum([payments1]) [payments] v_cte v group [account number1], [transaction date1]) v1 on maint.[accno] = v1.[account number1] , maint.[allocation date] <= v1.[transaction date1] , v1.[transaction date1] <= maint.[transaction date] left join (select [account number2], [transaction date2], sum([payments2]) [payments2] v_cte v group [account number2], [transaction date2]) v2 on maint.[accno] = v2.[account number2] , dateadd(dd,10,maint.[dca allocation date]) <= v2.[transaction date2] , v2.[transaction date2] <= maint.[transaction date]
Comments
Post a Comment