Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Query jerárquica en SQL Server

Estas en el tema de Query jerárquica en SQL Server en el foro de SQL Server en Foros del Web. Hola, tengo una tabla que se referencia a si misma formando una estructura jerarquica: Enlace_Menu ---------------- IdEnlace IdMenu TextoEnlace IdEnlacePadre Orden Quiero hacer una query ...
  #1 (permalink)  
Antiguo 07/12/2010, 05:17
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años
Puntos: 9
Query jerárquica en SQL Server

Hola, tengo una tabla que se referencia a si misma formando una estructura jerarquica:

Enlace_Menu
----------------
IdEnlace
IdMenu
TextoEnlace
IdEnlacePadre
Orden

Quiero hacer una query que me seleccione todos los enlaces de un menú, jerarquizados:

- Padre 1
- -- Hijo 1
- -- Hijo 2
- -- Hijo 3
- Padre 2
- -- Hijo 1
- -- Hijo 2
..............

He visto esta query:

Código SQL:
Ver original
  1. WITH n(empid, name) AS
  2.    (SELECT empid, name
  3.     FROM emp
  4.     WHERE name = 'Joan'
  5.         UNION ALL
  6.     SELECT nplus1.empid, nplus1.name
  7.     FROM emp AS nplus1, n
  8.     WHERE n.empid = nplus1.mgrid)
  9. SELECT name FROM n


Mi problema es que no salen ordenados siguiendo la jerarquía, ¿como puedo hacerlo?

¿Sabéis solucionarlo? Otra opción que he visto es con un procedimiento recursivo, aunque si es posible resolverlo con una query lo prefiero


Gracias

Última edición por PosProdukcion; 07/12/2010 a las 05:55
  #2 (permalink)  
Antiguo 07/12/2010, 06:13
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años
Puntos: 9
Respuesta: Query jerárquica en SQL Server

SOLUCIONADO con una mezcla de esto y añadiendo el orden del enlace padre a la consulta:

Código SQL:
Ver original
  1. WITH ConsultaRecursiva AS
  2. (SELECT IdEnlace,
  3.         texto_entrada,
  4.         fk_entradapadre,
  5.         orden,
  6.         orden AS ordenpadre
  7.     FROM Enlace_Menu AS PADRE
  8.     WHERE fk_menu = 3 AND fk_entradapadre IS NULL
  9. UNION ALL
  10.  SELECT HIJO.IdEnlace,
  11.         HIJO.texto_entrada,
  12.         HIJO.fk_entradapadre,
  13.         HIJO.orden,
  14.         CR.orden AS ordenpadre
  15. FROM Enlace_Menu AS HIJO
  16. INNER JOIN ConsultaRecursiva AS CR ON CR.pk_serie = HIJO.fk_entradapadre)
  17. SELECT DISTINCT
  18.         CR1.IdEnlace,
  19.         CR1.texto_entrada,
  20.         CR1.fk_entradapadre,
  21.         CR1.orden,
  22.         CR1.ordenpadre
  23. FROM ConsultaRecursiva AS CR1
  24. ORDER BY CR1.ordenpadre, CR1.orden

Gracias

Etiquetas: connect-by, jerarquia, query
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:48.