lunes, 17 de julio de 2017

Query Jerarquico (Recursivo) Sql Server

Paso #1: Crear la tabla dummy_jerarquia


CREATE TABLE [dbo].[dummy_jerarquia](
          [id] [int] NULL,
          [nombre] [varchar](20) NULL,
          [idpadre] [int] NULL
) ON [PRIMARY]

Paso #2: Inserta datos


INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (1, N'AMERICA', 0)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (2, N'America del Nombre', 1)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (3, N'America del Sur', 1)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (4, N'America Central', 1)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (5, N'Caribe', 1)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (6, N'Canada', 2)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (7, N'Estados Unidos', 2)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (8, N'Guatemala', 4)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (9, N'Salvador', 4)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (10, N'Argentina', 3)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (11, N'Brasil', 3)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (12, N'Colombia', 3)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (13, N'Republica Dominicana', 5)
INSERT [dbo].[dummy_jerarquia] ([id], [nombre], [idpadre]) VALUES (14, N'Trinidad y Tobago', 5)


Paso #3: Ejecutar el siguiente Query


With Jerarquia ( id, nombre, idpadre, level, sort)
As (
     SELECT
                  D.id,
                  CAST(D.nombre AS VARCHAR(100)),
                              D.idpadre,
                              0 as level,
                              CAST (D.nombre AS VARCHAR (100)) as sort
     FROM dummy_jerarquia AS D
           WHERE idpadre=0       
           UNION ALL
           SELECT D.ID,
                              CAST(REPLICATE('|---',level+1)+D.nombre as varchar(100)),
                              D.idpadre,
                              level+1,
                              CAST (sort + ' \\ ' + '('+CAST(D.ID AS VARCHAR(10))+')'+D.nombre AS VARCHAR (100)) as sort
     FROM dummy_jerarquia AS D
                 INNER JOIN Jerarquia J
                    ON D.idpadre=J.id)
SELECT J.id, J.nombre,J.idpadre, level, sort
FROM Jerarquia  J
ORDER BY SORT
option (maxrecursion 0)


Paso #4:  Revisar el resultado obtenido.


El ejemplo es bastante básico, pero espero con solo observar el Query puedo obtener la ayuda que necesitas.


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqL4AX6WYROm7jj_bPbafhtB5IwOVyD3bX4g-4CKNopuspk91u_rbR3gntitVqyZwQSuzMofHyZ6U8PhyphenhyphenCpUMPwxW6EVwpGXTam4ZIojmMu5q_XaXKpG3QzliRqup8uoWOAysjKkUTlyMY/s1600/ejemplo+Jerarquia.png

No hay comentarios.:

Publicar un comentario