3

テーブルを注文しました

  form_id | procedure_id 
----------+-------------
  101  |  24
  101  |  23
  101  |  22
  102  |  7
  102  |  6
  102  |  3
  102  |  2

そして、別のテーブルにはテーブルが実行されています

form_id | procedure_id 
----------+-------------
  101  |  42
  101  |  45
  102  |  5
  102  |  3
  102  |  7
  102  |  12
  102  |  13

期待される出力

form_id     o_procedure_id      p_procedure_id
  101           24                     42
  101           23                     45
  101           22                     NULL
  102           7                      7
  102           6                      5 
  102           3                      3 
  102           2                      12
  102           NULL                   13

以下のクエリを試しました:

with ranked as
(select 
dense_rank() over (partition by po.form_id order by po.procedure_id) rn1,
dense_rank() over (partition by po.form_id order by pp.procedure_id) rn2,
po.form_id, 
po.procedure_id, 
pp.procedure_id
from ordered po, 
performed pp where po.form_id = pp.form_id)
select ranked.* from ranked 
--where rn1=1 or rn2=1

上記のクエリは、順序付けられた繰り返し値とプロシージャ ID を含む値を返します。例外出力を取得するには?

4

1 に答える 1

1

テーブルの両側で複数の null 値や null 値を処理する方法がよくわかりませんでした。そのための私の例では、最初のテーブルが先頭にあり、すべてのエントリが含まれていると想定していますが、2 番目のテーブルには穴が含まれている可能性があります。クエリはきれいではありませんが、期待どおりの結果になると思います。

select test1_sub.form_id, test1_sub.process_id as pid_1, test2_sub.process_id as pid_2 from (
    select form_id, 
        process_id, 
        rank() over (partition by form_id order by process_id asc nulls last)
    from test1) as test1_sub
    left join (
        select * from (
            select form_id,
            process_id,
            rank() over (partition by form_id order by process_id asc nulls last)
        from test2
        ) as test2_nonexposed
    ) as test2_sub on test1_sub.form_id = test2_sub.form_id and test1_sub.rank = test2_sub.rank;
于 2013-04-16T19:17:02.733 に答える