有两个表:YPrk入库表,Ypck出库表,我想求所有商品的库存余额:如下代码    
 S3:='(select 商品编码,sum(进货数量)as 累计进货 from YpRk group by 商品大类,商品名称,商品规格,商品编码 ) t3 ';
 S4:='(select z.商品编码,(sum(z.出货数量))as 累计出货 from Ypck z,Yprk z1 where (z.商品编码=z1.商品编码) group by z.商品编码 ) t4 ';
 S5:='select t3.*,t4.累计出货 from '+s3+' left join '+s4+ ' on (t3.商品规格=t4.商品规格) ';出现的问题是,累计出货的值比正常值大2倍

解决方案 »

  1.   

    因为S4是2个表连接再统计,有可能存在1对多情况,即数量会重复,把Yprk去掉
      

  2.   

    on (t3.商品规格=t4.商品规格) 
    商品规格在入库表中有重复Left Join 后重复几次就乘几倍
    为什么不用“商品编码”?
      

  3.   

    只能说你的select语句有问题,你单独列出每种情况看看数据对不对再说,而且靠t3.商品规格=t4.商品规格来比对也有些问题吧,能保证唯一吗
      

  4.   

    S5是错的,t3与t4并没有商品规格字段,是商品编码,写错了吧
      

  5.   

    我写借了,原句是这样的:  
      S3:='(select 商品编码,sum(进货数量)as 累计进货,Sum(合计)as 累计进货金额 from YpRk group by 商品编码 ) t3 ';
      S4:='(select z.商品编码,(sum(z.出货数量))as 累计出货,(sum(z.合计))as 累计销售金额,sum((z.销售单价-z1.进货单价)*(z.出货数量))as 累计利润 from Ypck z,Yprk z1 where (z.商品编码=z1.商品编码) group by z.商品编码 ) t4 ';
      S5:='select t3.*,t4.累计出货,t4.累计销售金额,t4.累计利润 from '+s3+' left join '+s4+
          ' on (t3.商品编码=t4.商品编码)';
      

  6.   

    我写借了,原句是这样的:   
      S3:='(select 商品编码,sum(进货数量)as 累计进货,Sum(合计)as 累计进货金额 from YpRk group by 商品编码 ) t3 ';
      S4:='(select z.商品编码,sum(z.出货数量)as 累计出货,sum(z.合计)as 累计销售金额,sum((z.销售单价-z1.进货单价)*(z.出货数量))as 累计利润 from Ypck z,Yprk z1 where z.商品编码=z1.商品编码 group by z.商品编码 ) t4 ';
      S5:='select t3.*,t4.累计出货,t4.累计销售金额,t4.累计利润 from '+s3+' left join '+s4+
      ' on (t3.商品编码=t4.商品编码)';
      

  7.   

    那就是统计出来的商品编码有重复呵呵!
    可以先试试 Select 商品编码 From T3 和 Select Distinct 商品编码 From T3 看看条数是否一样
    还有T4也检查一下如果不一样肯定是有重复按你那个语句写出来统计结果肯定要翻倍的
    呵呵!
      

  8.   

    编码是唯一 的 ,不会重复,
    我调试的是语句S4里,如果加上Where z.商品编码=z1.商品编码 就是变成2倍