Bonjour

J'ai une table qui n'a pas vraiment hierarchique, dans laquelle j'aurais besoin d'une hierarchie, du coup j'ai créée plus ou moins ma hierarchie.
Les données ressemblent à ça :
v_ma_vue
OBJECTID, TYPE (E ou B), OBJECTID_BPC (un objectid distant)
et ca ressemble à ca :

1 B bpc1
2 E bpc1
3 E bpc1
4 B bpc2
5 B bpc3
6 E bpc3
7 B bpc4
8 E bpc4
9 E bpc4

En gros toutes les lignes de type B on une un objectid_bpc différent
et toutes les lignes E ont un objectid_bpc qui correspond à celui d'une ligne B (me parlez pas de l'organisation des données, c'est pas moi qui l'ait fait )
Et j'ai besoin d'une requête hierarchique parce que je voudrais trier mes lignes de type B seulement. (et le order siblings by pourrait me permettre de faire ca)

Alors voilà comment j'ai voulu feinter et je l'avoue ca marche pas du tout

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
select  vv.objectid, vv.objectid_parent
from (  
SELECT decode(v.type, 'B', V.OBJECTID_BPC, 9999) as objectid, decode(v.type, 'E', V.OBJECTID_BPC, 1) as objectid_parent,
            v.TYPE as type    
            FROM  v_ma_vue v, 
                   WHERE V.OBJECTID = 68034884
union
select 1 as objectid, null as objectid_parent, null as type
from BASEVIDE) vv
start with vv.objectid = 1
connect by  prior vv.objectid =  vv.objectid_parent
l'union c pour avoir une ligne racine.
et sinon je transforme mes objectid_bpc distant en id principal pour mes lignes de type B et en objectid_pere pour mes lignes de type E

Vous trouvez ca moche vous aussi ?