-1

以下のシナリオに衝撃を受けました。以下のサンプル データに基づいてクエリを変更する際に、あなたの助けが必要です。私の目的は、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

正確な結果を得るためにさらに調整するのに役立ちます。前もって感謝します

4

2 に答える 2

1

私が知る限り、条件に基づいて、サンプル クエリは 3 行だけを返すはずです。

ただし、あなたの質問に対する答えは、おそらく を使用することselect distinctです。join標準の構文を使用することもお勧めします。

select distinct event_low_id_s.nextval, e.event_id, tg.est_id, tg.amount
from TEM_GT tg join
     EVENT ee
     on tg.trans_id = e.trans_id   
where e.flag = 'N'

の構文insertが正しくありません。これは、問題のある部分を削除して、クエリを編集したことを示唆しています。

于 2013-04-08T07:05:02.683 に答える