0

参加している2つのテーブルがあります。

テーブル 1 は、テーブル 2 と 1 対多の関係にあります。つまり、テーブル 2 は、テーブル 1 の 1 つの行に対して複数の行を返すことができます。このため、テーブル 1 のレコードは、テーブル 2 の行と同じ数だけ複製されます。これは予想されます。

ここで、テーブル 1 の列の 1 つで合計を計算していますが、結合で複数の行が返されるため、合計は明らかに乗算されています。

この番号を元の番号に戻す方法はありますか? テーブル 2 の行数で除算してみましたが、期待どおりの結果が得られませんでした。これを行うことができる分析機能はありますか? 「この行がまだ合計にカウントされていない場合は、合計に追加する」のようなものがほとんど必要です

4

2 に答える 2

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
于 2012-11-26T23:08:44.817 に答える
0

これを行うためのはるかに最適化された方法があるかもしれません.私が今あなたに提供している解決策に満足していなくても、しばらくの間はこれがうまくいくでしょう.これは他のグルのために開かれています:)

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:リンク

于 2012-11-27T00:28:49.603 に答える