sql server - Complex NOT EXISTS or NOT IN Query -


i have 3 main tables i'm working with. query returns subset of want

select     dt.deposittypeid,     dt.deposittypename deposittype,      'total revenues' transactiongrouptype,     d.fiscalyeartypeid,     sum(d.depositamount) amount     deposit d      inner join deposittype dt on d.deposittypeid = dt.deposittypeid      inner join fiscalyeartype fyt on d.fiscalyeartypeid = fyt.fiscalyeartypeid     dt.deposittypeid in(1,2,4)      , d.transactionstatustypeid = 3 --must approved     , d.isprojecteddeposit = 0 --must not projected deposit group     dt.deposittypename,     d.fiscalyeartypeid,     dt.deposittypeid order     dt.deposittypeid,     d.fiscalyeartypeid 

returns subset below

 deposittypeid | deposittype | transactiongrouptype | fiscalyeartypeid | amount -------------------------------------------------------------------------------       1           auction        total revenues           1             3434       1           auction        total revenues           3             52152       1           auction        total revenues           4             12859       1           auction        total revenues           5             542863       1           smif interest  total revenues           5             524586 

now, complete query, need extract deposittypes , fiscalyeartypes not in there , populate amount zero.

 deposittypeid | deposittype | transactiongrouptype | fiscalyeartypeid | amount -------------------------------------------------------------------------------       1           auction        total revenues           1             3434       2           reserve sale   total revenues           1             0       4           smif interest  total revenues           1             0        1           auction        total revenues           2             0       2           reserve sale   total revenues           2             0       4           smif interest  total revenues           2             0        1           auction        total revenues           3             52152       2           reserve sale   total revenues           3             0       4           smif interest  total revenues           3             0        1           auction        total revenues           4             12859       2           reserve sale   total revenues           4             0       4           smif interest  total revenues           4             0        1           auction        total revenues           5             542863       2           reserve sale   total revenues           5             0       4           smif interest  total revenues           5             524586 

i got not exists , not in queries life of me cannot need.

i don't think need not exists; should suffice reexamine joins. since want summary of deposits every combination of deposit type , fiscal year type, consider cross join 2 type tables , left outer join deposit table. here's how might look:

-- sample data inferred question: declare @deposit table  (     depositid bigint,      fiscalyeartypeid bigint,      deposittypeid bigint,      transactionstatustypeid bigint,      isprojecteddeposit bit,      depositamount money ); insert @deposit values     (1, 1, 1, 3, 0, 3434),     (2, 3, 1, 3, 0, 52152),     (3, 4, 1, 3, 0, 12859),     (4, 5, 1, 3, 0, 542863),     (5, 5, 4, 3, 0, 524586),     -- edit: added last line test transactionstatustypeid/isprojecteddeposit restrictions.     (6, 2, 4, 1, 0, 9000);  declare @deposittype table  (     deposittypeid bigint,      deposittypename varchar(32) ); insert @deposittype values      (1, 'auction'),      (2, 'reserve sale'),      (4, 'smif interest');  declare @fiscalyeartype table (fiscalyeartypeid bigint); insert @fiscalyeartype values (1), (2), (3), (4), (5);  -- query: select     dt.deposittypeid,     dt.deposittypename deposittype,      'total revenues' transactiongrouptype,     fyt.fiscalyeartypeid,     coalesce(sum(d.depositamount), 0) amount     @deposittype dt     cross join @fiscalyeartype fyt     -- edit: applying deposit checks part of join rather in clause.     left join @deposit d on          dt.deposittypeid = d.deposittypeid ,         fyt.fiscalyeartypeid = d.fiscalyeartypeid ,         d.transactionstatustypeid = 3 ,         d.isprojecteddeposit = 0     dt.deposittypeid in (1, 2, 4) group     dt.deposittypename,     fyt.fiscalyeartypeid,     dt.deposittypeid order     fyt.fiscalyeartypeid,     dt.deposittypeid; 

results:

deposittypeid    deposittype    transactiongrouptype    fiscalyeartypeid    amount 1                auction        total revenues          1                   3434.00 2                reserve sale   total revenues          1                   0.00 4                smif interest  total revenues          1                   0.00 1                auction        total revenues          2                   0.00 2                reserve sale   total revenues          2                   0.00 4                smif interest  total revenues          2                   0.00 1                auction        total revenues          3                   52152.00 2                reserve sale   total revenues          3                   0.00 4                smif interest  total revenues          3                   0.00 1                auction        total revenues          4                   12859.00 2                reserve sale   total revenues          4                   0.00 4                smif interest  total revenues          4                   0.00 1                auction        total revenues          5                   542863.00 2                reserve sale   total revenues          5                   0.00 4                smif interest  total revenues          5                   524586.00 

(edited correct bug in original version of answer.)