以下のシナリオに衝撃を受けました。以下のサンプル データに基づいてクエリを変更する際に、あなたの助けが必要です。私の目的は、TEM_GT および TXN テーブルから入手可能なデータを使用して EVENT AND EVENT_LOW を作成することです。
TEM_GT (グローバル一時テーブル)
est_id primary key, trans_id, trp_id, amount
1 111 2221 1.5
2 111 3332 2.0
3 112 4443 3.0
TXN テーブル
trans_id, trans_type
111 type1
112 type1
イベントテーブル
event_id primary key, trans_id, trans_type, flag.
1000 111 type1 N
1001 112 type1 N
EVENT_LOW テーブル (最終テーブル)
event_low_id primary key, event_id, est_id, amount.
9991 1000 1 1.5
9992 1000 2 2.0
9993 1001 3 3.0
insert into(event_low_id, event_id, est_id, amount)
(
select event_low_id_s.nextval e.event_id, tg.est_id, tg.amount from
from TEM_GT tg, EVENT ee
WHERE
tg.trans_id = e.trans_id
AND e.flag = 'N'
);
TEM_GT および TXN gt に基づいて、データを EVENT テーブルに入力します。EVENT_LOW テーブルにデータを入力しようとすると、上記のクエリは 3 行ではなく 5 行を返します。これは、TEM_GT テーブルの trp_id によるものです。EVENT テーブルに trp_id を追加したくなく、上記の選択クエリで重複排除を処理したい。
Oracle 11g を使用しています。これについて私を助けてください。
以下のSQLを作成するだけです。それは私の問題をほとんど解決します。ただし、金額列に異なる値を返す場合があります。est_id 1に対して以下のように event_low の結果が必要でした。
event_low_id primary key, event_id, est_id, amount.
9991 1000 1 1.5
9992 1000 2 2.0
でもいつか返ってくる
event_low_id primary key, event_id, est_id, amount.
9991 1000 1 1.5
9992 1000 2 1.5
また
event_low_id primary key, event_id, est_id, amount.
9991 1000 1 2.0
9992 1000 2 2.0
select *
from (select x.*,
row_number() over (partition by event_id order by event_id) rn
from (seelct e.event_id, tg.est_id, tg.amount
from TEM_GT tg, EVENT e
WHERE
tg.trans_id = e.trans_id
AND e.flag = 'N'
) x
)
where rn = 1
正確な結果を得るためにさらに調整するのに役立ちます。前もって感謝します