2016-08-25 16 views
-2

必要なoracle SQLのヘルプ。2つの列から1つのリストを作成する

私は

from to 
F  B 
B  R 
R  D 
E  X 
X  Q 

を持つテーブルがあると私は私の問題は、Rからのジャンプである

F 
B 
R 
D 
E 
X 
Q 

リストを必要とする - Eへ> D - > X

編集:これは、fromとtoを持つ大きなリストです。通常はそこからすべての列があるので、私は

SELECT from,snr as Nr FROM list where StrAbsNr = 1 
union all 
SELECT to,snr + 1 as Nr FROM list 

を使用して順序付きリストを作成しました。しかし、いくつかの部分にはギャップがあります。この例では、D - > Eがありません。 誰かがアイデアを持っていますか?

+2

ことではありませんあなたが求めているものを明確にしなさい。あなたは特定の順序で出力をしますか?あなたはそう示唆しているようです。それ以外の場合は、UNIONを使用するだけの簡単な問題です(これは、別個の値を取得することも意味します)。 – mathguy

答えて

0

この作品:

WITH ft AS 
    (SELECT 'f' vfrom, 'b' AS vto FROM dual UNION ALL 
    SELECT 'b' , 'r' FROM dual UNION ALL 
    SELECT 'r','d' FROM dual UNION ALL 
    SELECT 'e','x' FROM dual UNION ALL 
    SELECT 'x','q' FROM dual ) 
SELECT a.a, MAX(rn), MIN(ob) 
FROM 
    (SELECT vfrom a , rownum rn, 1 ob FROM ft 
    UNION ALL 
    SELECT vto , rownum rn, 2 ob FROM ft 
) a 
GROUP BY a 
ORDER BY MAX(rn), MIN(ob) 

A MAX(RN) MIN(OB) 
- ---------- ---------- 
f   1   1 
b   2   1 
r   3   1 
d   3   2 
e   4   1 
x   5   1 
q   5   2 

7 rows selected 

またはanalitycのFUNCのROW_NUMBER:

SELECT * 
FROM 
    (SELECT a.a, 
    row_number() over (partition BY a order by rn, ob) rna, 
    ob, 
    rn 
    FROM 
    (SELECT vfrom a, rownum rn, 1 ob FROM ft 
    UNION ALL 
    SELECT vto , rownum rn, 2 ob FROM ft 
    ) a 
) 
WHERE rna=1 
ORDER BY rn, 
    ob 
A  RNA   OB   RN 
- ---------- ---------- ---------- 
f   1   1   1 
b   1   2   1 
r   1   2   2 
d   1   2   3 
e   1   1   4 
x   1   2   4 
q   1   2   5 

7 rows selected 
0
select "from" as val from table 
union 
select to from table 

そして、あなたは秩序を維持したい場合:ご例えば

select distinct val 
from (select "from" as val, rownum, 1 as valOrder from table 
    union 
    select to, rownum, 2 as valOrder from table) 
order by rownum,valOrder 
+1

'Union All'は重複を返します –

+0

これは彼が探しているものかもしれませんが、R - > DとE - > Xはどうしますか?おそらく彼はそれによって何かを意味すると思いますか? – mathguy

+0

@mathguy - 重複の削除は彼が簡単な方法で説明していると思います; D –

関連する問題