我加入了2张桌子。
表1与表2具有1-many关系。也就是说,表2可以为表1的单行返回多行。因此,表1的记录与表上的行一样多。 2 ..这是预期的。
现在,我对表1中的一列有一个总和,但是由于在连接上返回的多行,总和显然是相乘的。
有没有办法让这个号码回到原来的号码?我试着除以表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