求和问题(100分)

B

brink

Unregistered / Unconfirmed
GUEST, unregistred user!
表AA 人员资料表
ID XM XB
工号 姓名 性别
表A
ID JE1 RQ1
工号 金额1 日期
表B
ID JE2 RQ2
工号 金额2 日期
表C
ID JE3 RQ3
工号 金额3 日期
表D
ID JE4 RQ4
工号 金额4 日期

现要求统计出 月报表
如下格式:
ID XM XB JE1 JE2 JE3 JE4
工号 姓名 性别 累计金额1 累计金额2 累计金额3 累计金额4

select ID,XM,XB,sum(JE1),sum(JE2),sum(JE3),sum(JE4)
from AA
left join A on AA.ID=A.ID
left join B on AA.ID=B.ID
left join C on AA.ID=C.ID
left join D on AA.ID=D.ID
Group by AA.ID,AA.XM,AA.XB

这样统计结果是出现重复记录现像,该如何解决?
 
应该是与join的顺序有关,没有表不好测试,只好你自己多试一下了。
 
什么数据库?
我看语句应该没有问题.
oracle语句如下
select aa.id,aa.name,aa.xb,sum(a.je1),sum(b.je2),sum(c.je3),sum(d.je4)
from aa,a,b,c,d where aa.id=a.id(+) and aa.id=b.id(+)
and aa.id=c.id(+) and aa.id=d.id(+)
group by aa.id,aa.name,aa.xb
 
我用的MSSQL 7.0

A,B,C,D,四个表并没有任何关系

我的要求是统计出四个表的 JE
四个表的各自的 ID 都不是关键字
只是四个表中的ID 是 AA表中ID的字集
 
只要保证了aa表中id唯一,九部会有重复数据了!

还有吗?不懂,
 
几个表中数据如下:

AA表

ID XM
---------- ------------
311 赵五
312 李四
314 王七

A表

PH ID RQ JE
----- ----- ------- -------
0001 311 2002-06-26 1.0
0002 311 2002-06-26 10.0

B表
PH ID RQ JE
----- ----- ------- -------
0001 311 2002-06-26 1.0

C表

PH ID RQ JE
----- ----- ------- -------
0001 311 2002-06-26 1.0
0002 311 2002-06-26 10.0
0003 311 2002-06-26 10.0

D表

PH ID RQ JE
----- ----- ------- -------
0001 311 2002-06-26 1.0
0002 311 2002-06-26 1.0


select Distinct AA.ID,A.JE,B.JE,C.JE,D.JE
from AA
left join A on AA.ID=A.ID
left join B on AA.ID=B.ID
left join C on AA.ID=C.ID
left join D on AA.ID=D.ID
Group by AA.ID

结果:
AA.ID A.JE B.JE C.JE D.JE

311 1.0 1.0 1.0 1.0
311 1.0 1.0 10.0 1.0
311 10.0 1.0 1.0 1.0
311 10.0 1.0 10.0 1.0
312 0.0 0.0 0.0 0.0
314 0.0 0.0 0.0 0.0

(6 row(s) affected)

我想要结果:
AA.ID A.JE B.JE C.JE D.JE

311 11.0 1.0 21.0 2.0
312 0.0 0.0 0.0 0.0
314 0.0 0.0 0.0 0.0
 
""""select Distinct AA.ID,A.JE,B.JE,C.JE,D.JE
from AA
left join A on AA.ID=A.ID
left join B on AA.ID=B.ID
left join C on AA.ID=C.ID
left join D on AA.ID=D.ID
Group by AA.ID""""

应为:
select Distinct AA.ID,A.JE,B.JE,C.JE,D.JE
from AA
left join A on AA.ID=A.ID
left join B on AA.ID=B.ID
left join C on AA.ID=C.ID
left join D on AA.ID=D.ID

 
select Distinct AA.ID,A.JE,B.JE,C.JE,D.JE
from AA
left join A on AA.ID=A.ID
left join B on AA.ID=B.ID
left join C on AA.ID=C.ID
left join D on AA.ID=D.ID
Group by AA.ID



select ID,XM,XB,sum(JE1),sum(JE2),sum(JE3),sum(JE4)
from AA
left join A on AA.ID=A.ID
left join B on AA.ID=B.ID
left join C on AA.ID=C.ID
left join D on AA.ID=D.ID
Group by AA.ID,AA.XM,AA.XB
显然不一样,你为什么不用题目中写的语句?
 
我是为了找出,为什么求和的结果会出现重复计算的现像
我这样查询出再计算,显然是重复计算了。
 
ok!是我的错,不能简单用一串外连接.
因该是这样!
select ID,sum(JE1),sum(JE2),sum(JE3),sum(JE4)
from
(select id,0 JE1,0 JE2,0 JE3,0 JE4 from AA
UNION ALL
select id,JE1,0 JE2,0 JE3,0 JE4 FROM A
UNION ALL
select id,0 JE1,JE2,0 JE3,0 JE4 FROM B
UNION ALL
select id,0 JE1,0 JE2,JE3,0 JE4 FROM C
UNION ALL
select id,0 JE1,0 JE2,0 JE3,JE4 FROM D)
GROUP BY ID

一定正确,但不够精炼.

 
多谢,我正想是否应该用UION 试试
 
select aa.id,aa.xm,aa.xb,a1.je,b1.je,c1.je,d1.je
from aa
left join(select id,sum(je)asje from a )as a1 on aa.id=a1.id
left join(select id,sum(je)as je from b) as b1 on aa.id=b1.id
left join(select id,sum(je)as je from c) as c1 on aa.id=c1.id
left join(select id,sum(je)as je from d)as d1 on aa.id=d1.id
order by aa.id
 
多人接受答案了。
 
顶部