プロが教えるわが家の防犯対策術!

親子のデータを展開したVIEWを作成したいのですが、調べてみると
階層問い合わせというものがあるということまで分かりました。
(階層問い合わせ自体よく分かっていません)

その内容でSQLを以下のように記述してみたのですが、どうも思惑と
若干違います。思惑は親コードは最上位のものを出して、そこに子供で
ぶらさがっているKOCDを全部羅列したいのです。

どのようなSQLにすれば可能でしょうか。ご教授のほど、お願い致します。

記述したSQL
SELECT OYACD,KOCD
FROM TBL1
START WITH OYACD = 0
CONNECT BY PRIOR KOCD = OYACD

TBL1の内容
OYACD KOCD
--------------
1000110002
1000110003
1000120001
2000120002
2000120003
010001 親=0が最上位の親

SQLの結果
OYACD KOCD
--------------
010001  
1000110002
1000110003
1000120001
2000120002  ここと
2000120003  ここのOYACD 現在はひとつ上の親が出ている

このSQLの結果のOYACDで20001が最上位のOYACDの10001として
見えるようなSQLにしたいのですが、どうすれば可能でしょうか。

このように見えて欲しい
OYACD KOCD
--------------
010001  
1000110002
1000110003
1000120001
1000120002  ここと
1000120003  ここを最上位の親を表示したい。

A 回答 (1件)

connect_by_root演算子で最上位の値を取得できます。



SELECT
CASE WHEN LEVEL = 1 THEN OYACD ELSE CONNECT_BY_ROOT KOCD END OYACD
,KOCD
FROM TBL1
START WITH OYACD = 0
CONNECT BY PRIOR KOCD = OYACD;
としてみてください。

最上位の場合はOYACDをそのまま出力するようにするために、LEVELを使って判断しています。

すでに読んでいらっしゃるかもしれませんが、こちらが分かりやすく解説してくれていると思います。
http://codezine.jp/article/corner/301
    • good
    • 0
この回答へのお礼

さっそくの回答どうもありがとうございます。
教えていただいた方法で思惑のデータを参照することができました。

とても助かりました。ありがとうございました。

お礼日時:2011/08/11 14:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す