Recurso: Jerarquía en una consulta sql



Algunas veces necesitamos darle un orden jerárquico a datos que están en la misma consulta, para esto utilizamos la función connect by para comparar los campos y start with para indicarle cual es el dato inicial, si no está el start with realizara el proceso por cada registro.

Nota: Al utilizar la función connect by se agrega un dato el level, que indica en qué nivel de jerarquía esta.

Ejemplo: Queremos saber el orden de la empresa. 

Creamos una tabla donde agregamos la jerarquía de la empresa
create table jerarquia_gerencial(
       codigo       number,
       nombre_cargo varchar2(200),
       codigo_padre number
);

Insertamos 7 registros.

insert into jerarquia_gerencial values (1,'Director General',null)
insert into jerarquia_gerencial values (2,'Viceprecidente Ventas',1);
insert into jerarquia_gerencial values (3,'Jefe de Ventas',2);
insert into jerarquia_gerencial values (4,'Ventas',3);
insert into jerarquia_gerencial values (5,'Viceprecidente Servicio',1);
insert into jerarquia_gerencial values (6,'Jefe de Servicios',5);
insert into jerarquia_gerencial values (7,'Soporte Tecnico',6);

Realizamos una consulta en orden de la misma tabla.

select codigo,codigo_padre,nombre_cargo
from jerarquia_gerencial a
connect by prior codigo = codigo_padre
  start with codigo_padre is null;

Output:





Para que se vea mejor podemos utilizar una función LPAD y el recurso level.

select codigo,codigo_padre,Lpad(nombre_cargo,length(nombre_cargo)+(level*3),' ') Cargo
from jerarquia_gerencial a
connect by prior codigo = codigo_padre
  start with codigo_padre is null;

Output:

No hay comentarios:

Publicar un comentario