Consulta SQL para número jerárquico.
Aquí tienes los datos:
CREATE TABLE dbo.Correspondents
(
ID smallint NOT NULL,
ParentID smallint NULL,
Name nvarchar(30) NOT NULL,
OrderNumber int NOT NULL
);
INSERT INTO dbo.Correspondents VALUES
(1, null, 'A', 1),
(2, 1, 'B', 2),
(3, 1, 'C', 3),
(4, 2, 'D', 1);
Y el resultado que quiero:
ID|Name|NumeroJerarquico
1 | A| 1
2 | B| 1.2
3 | C| 1.3
4 | D| 1.2.1
La clave es que cada entrada tiene su propio número de orden, pero la consulta debe devolver un número jerárquico que contenga todos los números de los padres como una subsecuencia delimitada por punto, con el propio número al final. La característica principal requiere la capacidad de proporcionar un número jerárquico para cualquier entrada, por lo que la consulta debe ser capaz de recibir un ID de la entrada y devolver un número jerárquico para ella. El DBMS es MSSQL 2017.
¡Gracias de antemano!
davy.ai
Solución mediante Consulta Recursiva
Para resolver este problema, necesitamos utilizar una consulta recursiva para obtener la jerarquía de cada entrada. Podemos utilizar la característica CTE (Expresión de Tabla Común) de SQL para implementar una consulta recursiva. Aquí está la consulta SQL para obtener el número jerárquico de cada entrada:
El código SQL anterior define una CTE llamada “Hierarchy” que inicialmente obtiene todas las entradas de nivel superior (aquellas sin un padre). Luego, obtiene recursivamente las entradas hijo utilizando una unión con la CTE “Hierarchy”. La función CAST se utiliza para crear el número jerárquico concatenando el “HierarchicalNumber” del padre con el “OrderNumber” de la entrada actual. Finalmente, la consulta selecciona el “ID”, “Name” y “HierarchicalNumber” de la CTE “Hierarchy”.
Para obtener el número jerárquico de una entrada específica, puedes utilizar el siguiente código SQL:
Esta consulta devolverá el número jerárquico para la entrada con “ID” = 4.
¡Espero que esta solución sea útil!