报表数据重复计算,去重处理!

现在有三张表,A表中存放项目基础信息,B表存在项目的合同信息,C表存在项目的订单信息,分别联查AB或AC数据,计算是正确的,但是联查三张表,数据会存在重复,重复数据例子如下:

A中有一条数据“中诚项目”

B中有两条数据,合计合同金额为10000

C中有七条数据,合计订单总额为5000

报表中呈现的错误数据则为

项目名称(A表)项目金额(B表)项目订单金额(C表)
中城项目700005000

相当于项目金额根据C表的订单条数重复计算了七次,具体的sql如下,亲各位大神帮忙看看是不是SQL逻辑有问题,谢谢!

select t.id

,sum(t.产品收入) as 产品收入

,sum(t.结算收入) as 产品成本

,sum(t.打款金额) as 销量

,t.cpnm

from (select 

a.id as id

,a.cpmc as cpnm

,a.cjrq as 创建日期

,a.cplx as 产品类型

,a.cpssgs as 所属公司

,b.htje as 产品收入

,b.xmxl as 规模

,c.jssr as 结算收入

,c.dkje as 打款金额

from uf_cpxx a

left join uf_htjcxxb b on b.xscpmc= a.id

left join uf_ddgl c on c.cpm= a.id

where a.cpssgs='6' and a.cjrq>='${ksrq}' and a.cjrq<='${jsrq}'

)t

group by t.id,t.cpnm


baibian 发布于 2019-6-27 11:31
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
doudekaixinLv6中级互助
发布于2019-6-27 12:24

(select xscpmc,sum(htjeas 产品收入 from uf_htjcxxb  group by  xscpmc) b

(select cpm,sum(jssr as  结算收入 from uf_ddgl group by cpm ) c


两个表先汇总,再连,你的顺序错了。


  • baibian baibian(提问者) 多谢多谢
    2019-06-27 13:40 
  • doudekaixin doudekaixin 回复 baibian(提问者) 解决了采纳一下。
    2019-06-27 13:41 
  • baibian baibian(提问者) 按照你的方式问题解决了,谢谢哦 select t.id ,sum(t.cpsr) as 产品收入 ,sum(t.jscb) as 结算成本 ,t.cpnm from ( select a.id as id ,a.cpmc as cpnm ,a.cjrq as 创建日期 ,a.cplx as 产品类型 ,a.cpssgs as 所属公司 ,b.htje as cpsr ,c.jssr as jscb from uf_cpxx a left join(select xscpmc,sum(htje) as htje from uf_htjcxxb group by xscpmc)b on b.xscpmc=a.id left join(select cpm,sum(jssr) as jssr from uf_ddgl group by cpm)c on c.cpm=a.id where a.cpssgs=\'6\' and a.cjrq>=\'${ksrq}\' and a.cjrq<=\'${jsrq}\' )t group by t.id,t.cpnm
    2019-06-27 15:23 
最佳回答
0
seeyoulmLv5见习互助
发布于2019-6-27 14:04

专门创建了三个表来测试你的问题

你的sql语句问题点在于直接使用left join on将a,b,c三个表进行了联查。

应该先联查两个表,然后再将查出来的集合与第三个表联查。最后按照项目id分组就行

修改一下,sql语句如下:

select 

    t.id,

    sum(t.产品收入) as 产品收入,

    sum(c.jssr) as 产品成本,

    sum(c.dkje) as 销量,

    t.cpnm


from (select 

    a.id as id,

    a.cpmc as cpnm,

    a.cjrq as 创建日期,

    a.cplx as 产品类型,

    a.cpssgs as 所属公司,

    b.htje as 产品收入,

    b.xmxl as 规模,

    from uf_cpxx a

    left join uf_htjcxxb b on b.xscpmc= a.id ) t


left join uf_ddgl c on c.cpm= a.id

where a.cpssgs='6' and a.cjrq>='${ksrq}' and a.cjrq<='${jsrq}'

group by t.id,t.cpnm




  • 3关注人数
  • 850浏览人数
  • 最后回答于:2019-6-27 14:04
    请选择关闭问题的原因
    确定 取消
    返回顶部