select isnull(SUM(netPaid),0.00) from dbo.F_AccountEntry a
right join dbo.RPT_resultA41 b
on a.CompanyID=b.CompanyID
and a.AcctID=b.acctid
and b.CompanyID=1 and b.userName='sally_law'
and a.FiscalDateID>-13 and a.FiscalDateID<0
group by b.acctid
如上语句,我的B表在and b.CompanyID=1 and b.userName='sally_law' 条件下 只有66条数据,
但这样出来的如果却有77条之多,什么原因呢,是我的语句有问题吗?
------解决方案--------------------
left join 应该是66条数据吧。right join 会出来一些右表有,但是左表空的数据。right join 查询出来的结果中 左表空的也会算作一条数据。
------解决方案--------------------
right/left join都会添加“额外行”,你如果用inner join那应该就只有66行了,应该考虑是否有必要用外联,而不是随便用。
------解决方案--------------------
语句是没有问题的,只有理解的问题
如果怀疑不对的,把条件写到where中去
------解决方案--------------------
弱弱的问一句,最上面的那些注释是怎么弄出来的?
------解决方案--------------------
SELECT a.acctid,isnull(bb.closingAmtBase,0) closingAmtBase FROM a LEFT JOIN (
SELECT SUM(closingAmtBase) closingAmtBase ,acctid,companyid FROM b
GROUP BY acctid,companyid
) bb ON bb.companyid = a.companyid AND bb.acctid = a.acctid
81 9506.98
82 183207.21
83 0.00
84 0.00