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

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -