Oracle - camino que pasa por la estructura de nodos múltiples

votos
0

Tengo la siguiente estructura de Oracle 12c tablas:

tabla 1:

path_id   node_name_1   node_name_1_para   node_name_2  node_name_2_para
-------------------------------------------------------------------
    1      node1         node1_val           node2        node2_val
    1      node2         node2_val           node1        node1_val
    1      node2         node2_val           node3        node3_val
    1      node3         node3_val           node2        node2_val
    1      node3         node3_val           node4        node4_val
    1      node4         node4_val           node3        node3_val
    2      node3         node3_val           node6        node6_val
    2      node6         node6_val           node3        node3_val

Tabla 2:

path_id    start_node     end_node
-----------------------------------
   1         node1         node4
   2         node3         node6

donde id es un identificador de ruta de acceso que tiene múltiples nodos y node_name_1 y node_name_2 representan los saltos de este camino. Así, por ejemplo path_id = 1 comienzo de node1 y el final en el nodo 4 (según la Tabla 2), pasando por el nodo 2 y node3 (según tabla 1), mientras que path_id = 2 empezar desde Nodo5 y fin en Nodo6. Como se puede notar, están duplicados en el medio del lúpulo.

Necesito convertir esta tabla con la siguiente estructura:

    path_id   node_name   node_name_para  order
---------------------------------------------------
       1        node1       node1_val       1  
       1        node2       node2_val       2
       1        node3       node3_val       3  
       1        node4       node4_val       4  
       2        node3       node3_val       1  
       2        node6       node6_val       2  

¿Me puede dar algunas pistas de cómo proceder como estoy todavía nuevo en Oracle.

Publicado el 09/10/2019 a las 18:59
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

No soy capaz de ver cualquier uso de tabla2 aquí. Usted puede simplemente eliminar los duplicados de tabla1 en sí de la siguiente manera:

Select t.*, 
row_number() 
 over (partition by path_id order by to_number(replace(node_name, 'node', ''))) as order_
From
(Select distinct path_id,
Node_name,
Node_name_1_para
From table1) t
Order by path_id, order_;

¡¡Salud!!

Respondida el 09/10/2019 a las 19:24
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more