1-many表连接后的不同行的总和

时间:2012-11-26 23:02:49

标签: sql oracle join sum

我加入了2张桌子。

表1与表2具有1-many关系。也就是说,表2可以为表1的单行返回多行。因此,表1的记录与表上的行一样多。 2 ..这是预期的。

现在,我对表1中的一列有一个总和,但是由于在连接上返回的多行,总和显然是相乘的。

有没有办法让这个号码回到原来的号码?我试着除以表2中的行数,但这并没有给我预期的结果。有没有可以做到这一点的分析功能?我几乎想要类似的东西 “如果此行尚未计入总和,请将其添加到总和中”

2 个答案:

答案 0 :(得分:0)

很难确切地知道没有示例结构/数据需要的结果等,但这可能就是你所追求的:

Select
  s.t1Sum,
  t1.*,
  t2.*
From (
    Select
      sum(col1) as t1Sum
    From
      Table1
    ) s
    Cross Join
  Table1 t1
    Inner Join
  Table2 t2
    On t1.Id = t2.FkId

答案 1 :(得分:0)

可能有更优化的方式来做到这一点,即使我对我现在提供给你的解决方案不满意,但暂时这对你有用。让这对其他大师开放:)< / p>

create table table1(id number,val number);
create table table2(id number,name varchar2(200));

insert into table1 values(1,1);
insert into table1 values(2,2);
insert into table1 values(3,3);

insert into table2 values(1,'gaurav');
insert into table2 values(1,'saurav');
insert into table2 values(1,'paurav');

insert into table2 values(2,'Rohan');
insert into table2 values(2,'Bhasker');
insert into table2 values(2,'Garima');


WITH tab as
(
SELECT id,sum(val) over() sum
FROM(
select DISTINCT t1.id,t1.val
from table1 t1,table2 t2 where t1.id=t2.id
))
SELECT tab.id,t2.id,t2.name,tab.sum
FROM table2 t2,tab
WHERE t2.id=tab.id

<强> SQLFIDDLE: link