1

質問:CC=1WP=2などのコードを割り当て、クエリのその部分を作成して目的の結果を得るにはどうすればよいですか?同じ取引日に複数の取引がある場合は、ビジネスルールを適用します。

これがOracle11gに関する私の質問です

select tid, 
       cycle,
       apply_no, 
       seq_no, 
       trans_date, 
       trans_type,
       priority
from ( select tid, 
              cycle,
               apply_no, 
               seq_no, 
               trans_date, 
                trans_type,
                rank() over (partition by tid,
                                 order by trans_date desc,seq_no desc) priority
from transactions where tid=1              

現在の結果

TID  cycle    apply_no  seq_no trans_date   trans_type  priority
----------------------------------------------------------------
1    201420    2        2       27-NOV-12   WP          1
1    201320    1        1       27-NOV-12   CC          2
1    201420    2        1       16-OCT-12   CC          3

望ましい結果

TID  cycle     apply_no seq_no trans_date trans_type  priority
---------------------------------------------------------------
1    201420    2        2      27-NOV-12  CC          1
1    201320    1        1      27-NOV-12  WP          2
1    201420    2        1      16-OCT-12  CC          3

理由: trans_dateが同じである場合、ビジネスルールではCCがWPよりも優先されます(CCがWPの前にソートされるためではありません)。

4

1 に答える 1

1

trans_typeの順序は実際にはアルファベット順であるため、rank関数で注文に追加することができます。ただし、より明確にするために、デコードを使用します。次のようなものです。

with transactions as
(
    select 1 tid, 201420 cycle, 2 apply_no, 2 seq_no, to_date('27-NOV-12','DD-MON-YY') trans_date, 'WP' trans_type from dual union all
    select 1 tid, 201320 cycle, 1 apply_no, 1 seq_no, to_date('27-NOV-12','DD-MON-YY') trans_date, 'CC' trans_type from dual union all
    select 1 tid, 201420 cycle, 2 apply_no, 1 seq_no, to_date('16-OCT-12','DD-MON-YY') trans_date, 'CC' trans_type from dual
)
select tid, 
       cycle,
       apply_no, 
       seq_no, 
       trans_date, 
       trans_type,
       priority
from ( select tid, 
              cycle,
               apply_no, 
               seq_no, 
               trans_date, 
                trans_type,
                rank() over (partition by tid
                                 order by trans_date desc,decode(trans_type,'CC',1,'WP',2,3),seq_no desc) priority
from transactions where tid=1 );

生成するもの:

       TID      CYCLE   APPLY_NO     SEQ_NO TRANS_DATE  TRANS_TYPE   PRIORITY
---------- ---------- ---------- ---------- ----------- ---------- ----------
         1     201320          1          1 27-NOV-2012 CC                  1
         1     201420          2          2 27-NOV-2012 WP                  2
         1     201420          2          1 16-OCT-2012 CC                  3
于 2012-11-29T18:28:37.897 に答える