sql - Full Outer Join returning too many rows -


what i'm trying achieve data set have set of holdings data against benchmark , show holdings either on or off benchmark. data set should this:

positiondate   portfoliocode   benchmark   securitydesciption   portfolioweight   benchmarkweight 2017-03-31     port1           jpm         sec1                 1.00              1.5 2017-03-31     port1           jpm         sec2                 0.54              null 2017-03-31     port1           jpm         sec3                 null              0.5 

my sql looks following full outer join can return weights both portfolio data , benchmark data depending on whether portfolio holds or not:

select          lt.positiondate                                                         positiondate     ,   lt.portfoliocode                                                        portfoliocode     ,   gpi.indx_desc                                                           benchmark     ,   i.iss_desc                                                              securitydescription     ,   lt.baseccyeffectiveexposure / nullif(lt.totalportfoliomv_baseccy,0)     portfolioweight               ,   issindx.wght_eod                                                        benchmarkweight  #lkthru lt      inner join issue_dg         on i.instr_id = lt.id_netik_instr_id      inner join gp_bnchmrk_xref bxref     -- portfolio benchmark crossreference         on bxref.acct_id = lt.portfoliocode -- links portfolio         , bxref.bnchmrk_type = 'primary'  -- link reporting benchmark         , (@enddate between bxref.start_tms , isnull(bxref.end_tms,@enddate))  -- ensures pick correct benchmark date reporting      inner join gp_index gpi         on gpi.indx_id = bxref.indx_id      -- links gp_index pick correct benchmark      full outer join iss_indx_cnstnt issindx      -- join ensure have constituents of benchmark returned portfolio constituents         on issindx.indx_instr_id = gpi.instr_id         , issindx.cnstnt_instr_id = i.instr_id    -- join constituents of portfolio         , issindx.as_of_dte = @enddate 

however i'm not returning desired result set , seem getting every record iss_indx_cnsnt returned. must filters after on on full outer join or not possible i'm trying achieve? i'm trying avoid having put filtered data temp table , join or creating union , group by.

does have ideas i'm going wrong?

edit - included working example

declare @enddate datetime  set @enddate = '2017-03-31'  declare @port table (     portcode    varchar(40) )  insert @port values ('port1')  declare @lkthru table (     positiondate    datetime     ,   portfoliocode   varchar(40) ,   instr_id        varchar(40) ,   portfolioweight float )  insert @lkthru values('2017-03-31','port1','1',1.00) insert @lkthru values('2017-03-31','port1','2',0.54)  declare @issue_dg table (     instr_id        varchar(40) ,   securitydesc    varchar(100) )  insert @issue_dg values ('1','sec1') insert @issue_dg values ('2','sec2') insert @issue_dg values ('3','sec3') insert @issue_dg values ('4','sec4')  declare @gp_bnchrk_xref table (     portfoliocode   varchar(40) ,   benchmarkid     varchar(40) )  insert @gp_bnchrk_xref values ('port1','jpm1')  declare @gpindex table (     benchmarkid     varchar(40) ,   benchmarknme    varchar(40) )  insert @gpindex values ('jpm1','jpm')  declare @issueindexconst table (     benchmarkdate   datetime ,   benchmarkid     varchar(40) ,   const_id        varchar(40) ,   benchmarkweight float )  insert @issueindexconst values ('2017-03-31','jpm1','1',1.5) insert @issueindexconst values ('2017-03-31','jpm1','3',0.5) insert @issueindexconst values ('2017-03-31','jpm1','4',0.5) insert @issueindexconst values ('2017-02-28','jpm1','1',1.5) insert @issueindexconst values ('2017-02-28','jpm1','3',0.5) insert @issueindexconst values ('2017-02-28','jpm1','4',0.5)  select          isnull(lt.positiondate,issindx.benchmarkdate)   positiondate     ,   isnull(lt.portfoliocode,bxref2.portfoliocode)   portfoliocode     ,   isnull(gpi.benchmarknme,gpi2.benchmarknme)      benchmark     ,   isnull(i.securitydesc,ib.securitydesc)          securitydesc     ,   lt.portfolioweight     ,   issindx.benchmarkweight  @gp_bnchrk_xref bxref      inner join @lkthru lt         on lt.portfoliocode = bxref.portfoliocode      inner join @issue_dg         on i.instr_id = lt.instr_id      inner join @gpindex gpi         on gpi.benchmarkid = bxref.benchmarkid      full outer join @issueindexconst issindx         on issindx.benchmarkid = gpi.benchmarkid         , issindx.const_id = i.instr_id         , issindx.benchmarkdate = @enddate      left outer join @issue_dg ib         on ib.instr_id = issindx.const_id      left outer join @gpindex gpi2         on gpi2.benchmarkid = issindx.benchmarkid      left outer join @gp_bnchrk_xref bxref2         on bxref2.benchmarkid = issindx.benchmarkid 


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -