2017-05-24 15 views
0

私は単純な要件がありますが、必要な出力を正しく取得できませんでした。oracle query to group columns

私は2つのテーブルがある - 私は書く必要があり、私は

P1 | P1_C1 
P1 | P1_C2 
P2 | P2_C1 
P2 | P2_C3 
P3 | P3_C4 
etc 

のようなレコードを持って、私は子テーブル内の親

P1 
P2 
P3 
etc 

のリストを持っている親テーブルに、親、子供

を次を返すクエリ

最初の行に親レコードが続く

------ | ------ 
P1  | null 
null | P1_C1 
null | P1_C2 
P2  | null 
null | P2_C1 
null | P2_C3 
P3  | nul 
null | P3_C4 

答えて

1

両方のテーブルから親と子を選択します(使用可能な場合)。その後、親と子でソートします(最初はヌルの子を使用します)。子を表示するときに親を押さえるためには、case式が必要です。

select case when c is null then p end as parent, c as child 
from 
(
    select p, c from children 
    union all 
    select p, null from parents 
) 
order by p, c nulls first; 
0

、このソリューションをしてください考えてみましょう。その子に続いて別の親レコードなど

例は、その子によって編。最初の列は使用しないでください。適切なソートにのみ使用されます。

select 
    pa.id, null, ch.value 
from 
    parent pa 
    join child ch on parent.id=child.id 
union 
select 
    pa2.id, pa2.id, null 
from 
    parent pa2 
order by 1, 3 nulls first;