就是我有两个表YPrk入库和YPck出库,现在YPrk表中同一种商品可能有N个,我现在的代码是这样的:   select z.商品大类,z.商品名称,z.商品规格,z.商品编码,(sum(z.出货数量))as 累计出货,(sum(z.合计))as 累计销售金额,sum((z.销售单价-z1.进货单价)*(z.出货数量))as 累计利润 from Ypck z,Yprk z1 where (z.商品规格=z1.商品规格)and(z.商品编码=z1.商品编码) group by z.商品大类,z.商品名称,z.商品规格,z.商品编码 这样的查询得出的结果中:累计出货、累计销售金额,累计利润 会是正常值的N倍,这个怎么解决呀

解决方案 »

  1.   

    from Ypck z,Yprk z1....
    改为
    from Ypck z,(select ... from Yprk group by ...) z1....
      

  2.   

    “YPrk表中同一种商品可能有N个”  相同记录的每个字段都是一样的吗? 没有什么可以区分开?如果记录完全相同,那就是多余的,不应该出现的,表应该设置主键避免重复记录出现如果表里面的每条记录是有不同的字段可以区分开来,那么where条件就应该可以做到不取出多余记录YPrk表里面有完全重复记录的话,用 select distinct * from YPrk 就可以去掉重复
    多个表关联的话,这样:
     select * from YPck z inner join (select distinct * from YPrk where …… ) z1 
         on (z.编码=z1.编码 and z.规格=z1.规格 and z.某字段=z1.某字段)
      where ……  ……
      

  3.   


    select  ycrk.商品大类,..,(sum(ycrk.出货数量))as 累计出货,(sum(ycrk.合计))as 累计销售金额,sum((ycrk.销售单价-aa.进货单价)*(ycrk.出货数量))as 累计利润  from (select ycrk.商品编码,ypck.进货单价 from ycrk left join ypck on ...)as aa left join ycrk ........中间可能代码不太准确,不过思路就这样,我也是前两天刚遇到这个问题,自己就想到这个解决办法,就是在FROM子句里让另一个有重复的表给他按另一个表搞成唯一性,达到和另一个表的一对一关系,省略号部分按你代码填进去就行了
      

  4.   

    你 Yprk同一商品有多条的话,你这样查询会是N*N的关系,肯定会翻倍。建议这样改一下:思路是把Yprk同一商品只返回一条记录,
    select z.商品大类,z.商品名称,z.商品规格,z.商品编码,(sum(z.出货数量))as 累计出货,(sum(z.合计))as 累计销售金额,sum((z.销售单价-z1.进货单价)*(z.出货数量))as 累计利润 
    from Ypck z,
    (select t.商品规格,t.商品编码,t.进货单价 from Yprk t group by t.商品规格,t.商品编码,t.进货单价) z1 
    where (z.商品规格=z1.商品规格)and(z.商品编码=z1.商品编码) group by z.商品大类,z.商品名称,z.商品规格,z.商品编码
    没有测试,楼主可以按这个思路试一下。