Una consulta que no me sale.

04/02/2009 - 21:46 por Jose Antonio | Informe spam
Hola tengo esta tabla y estos datos:

CREATE TABLE EMPLEADOS(EMPLEADO VARCHAR(4),NOMBRE VARCHAR(35),JEFE
VARCHAR(4))

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0001','JUAN',NULL)

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0002','JOSE','0001')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0003','LUIS','0001')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0004','ALBERTO','0003')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0005','ALAN','0002')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0006','ANTONIO',NULL)

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0007','JAVIER','0006')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0008','PEPITO','0007')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0009','CARLOS','0008')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0010','MARIA','0005')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0011','EVA','0009')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0012','CRUZ','0010')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0013','ANA','0009')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0014','MARIELA','0007')

INSERT EMPLEADOS (EMPLEADO,NOMBRE,JEFE) VALUES ('0015','MARIA','0003')

cada empleado tiene un jefe y los empleados cuyo jefe es null son los jefes
supremos.

llevo mucho tiempo probando y no hay maneta de sacarlo.

necesito hacer un select que me diga cada empleado y su jefe supremo, este
serie el resultado
que debe de salir:

EMPLEADO NOMBRE JEFESUPREMO
0001 JUAN NULL
0002 JOSE 0001
0003 LUIS 0001
0004 ALBERTO 0001
0005 ALAN 0001
0006 ANTONIO NULL
0007 JAVIER 0006
0008 PEPITO 0006
0009 CARLOS 0006
0010 MARIA 0001
0011 EVA 0006
0012 CRUZ 0001
0013 ANA 0006
0014 MARIELA 0006
0015 MARIA 0001

haber si alguien me puede ayudar.

Un saludo

Preguntas similare

Leer las respuestas

#6 Carlos M. Calvelo
05/02/2009 - 00:03 | Informe spam
Hola Jose Antonio,

Cuando estaba probando yo, ya Alejandro había puesto su
solución. Pero como me ha salido algo parecido pero
distinto... pues ahí va:

;with x as
(
select empleado,nombre, empleado as jefesupremo, jefe as
jefedeljefe
from empleados
where jefe is null
union all
select e.empleado,e.nombre,x.jefesupremo,x.jefedeljefe as
jefedeljefe
from empleados e join x on e.jefe =x.empleado
where x.jefedeljefe is null
)
select empleado,nombre,jefesupremo from x

Saludos,
Carlos
Respuesta Responder a este mensaje
#7 Alejandro Mesa
05/02/2009 - 01:39 | Informe spam
Carlos M. Calvelo,

Interesante tu solución; En principio es el mismo metodo, empujar el codigo
de los jefes supremo hacia todos sus subordinados. Fijate que la parte
recursiva de la CTE funciona igual aun si le quitas la clausula "where"
(where jefedeljefe is null).


AMB



"Carlos M. Calvelo" wrote:

Hola Jose Antonio,

Cuando estaba probando yo, ya Alejandro había puesto su
solución. Pero como me ha salido algo parecido pero
distinto... pues ahí va:

;with x as
(
select empleado,nombre, empleado as jefesupremo, jefe as
jefedeljefe
from empleados
where jefe is null
union all
select e.empleado,e.nombre,x.jefesupremo,x.jefedeljefe as
jefedeljefe
from empleados e join x on e.jefe =x.empleado
where x.jefedeljefe is null
)
select empleado,nombre,jefesupremo from x

Saludos,
Carlos

Respuesta Responder a este mensaje
#8 Carlos M. Calvelo
05/02/2009 - 02:10 | Informe spam
Hola Alejandro,

On 5 feb, 01:39, Alejandro Mesa
wrote:
Carlos M. Calvelo,

Interesante tu solución; En principio es el mismo metodo, empujar el codigo
de los jefes supremo hacia todos sus subordinados. Fijate que la parte
recursiva de la CTE funciona igual aun si le quitas la clausula "where"
(where jefedeljefe is null).




Vaya! Pues si... que despierto estás tu!
Y ahora que me fijo bien, no hace falta el jefedejefe para nada.
Tampoco
en primera parte.

;with x as
(
select empleado,nombre, empleado as jefesupremo
from empleados
where jefe is null
union all
select e.empleado,e.nombre,x.jefesupremo
from empleados e join x on e.jefe =x.empleado
)
select empleado,nombre,jefesupremo from x

Que al final creo que viene a ser igual a la tuya, si la simplificas
un poco. :o

Saludos,
Carlos
Respuesta Responder a este mensaje
#9 Carlos M. Calvelo
05/02/2009 - 02:19 | Informe spam
:)
Mas corto: :-)

;with x as
(
select empleado,nombre, empleado as jefesupremo
from empleados
where jefe is null
union all
select e.empleado,e.nombre,x.jefesupremo
from empleados e join x on e.jefe =x.empleado
)
select * from x

Carlos
Respuesta Responder a este mensaje
#10 JOSE ANTONIO
05/02/2009 - 10:26 | Informe spam
Gracias ati Carlos también, por tu tiempo y solución, ya veo que hay que
empaparse bien de las cte, para temas recursivos.

Un saludo.
"Carlos M. Calvelo" escribió en el mensaje de
noticias
news:
:)
Mas corto: :-)

;with x as
(
select empleado,nombre, empleado as jefesupremo
from empleados
where jefe is null
union all
select e.empleado,e.nombre,x.jefesupremo
from empleados e join x on e.jefe =x.empleado
)
select * from x

Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida