0

これらは私のテーブルです。

Step

stepid     name
a           place1
b           place2          
c           place3
d           place4
e           place5
f           place6


Stage

stageid     start        finish
1            a            b
2            b            c
3            c            d
4            d            e
5            e            f

Trip

tripid     stageid       
1            1            
1            2            
1            3            
1            4      
1            5  

このクエリ結果を達成したい

tripid     stageid       
1          place1,place2,place3,place4,place5,place6        

すべての ID を 1 つのフィールドに入れる方法と、ID を割り当てられた名前に置き換える方法を知っています。ただし、これらのソリューションの両方に参加する方法がわかりません。

これは、IDを1つのフィールドに配置するために使用しているSQLです。

SELECT REPLACE(stageid,'''') as stages
FROM (SELECT SYS_CONNECT_BY_PATH(stageid,' ') stageid, level 
FROM trip
START WITH stageid = (select min(stageid) from trip)
CONNECT BY PRIOR stageid < stageid
ORDER BY level DESC) 
WHERE rownum = 1; 

start と finish は stepid の外部キーで、trip テーブルの stageid は Stage テーブルの stageid の外部キーです。私は oracle developer ver 3.2 で作業しています。助けてください。

4

3 に答える 3

1

listagg()これを行う最も簡単な方法は、文字列を集約するために使用することだと思います。テーブルを結合してから集計します。

select t.tripid,
       listagg(st.name, ',') within group (order by st.stepid)
from trip t join
     stage s
     on t.stageid = s.stageid join
     step st
     on st.stepid in (s.start, s.finish)
group by t.tripid
于 2013-05-06T18:07:13.407 に答える