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

#1 Jorge Guillen
04/02/2009 - 23:25 | Informe spam
Prueba con este Select

SELECT T.EMPLEADO,T.NOMBRE,R.NOMBRE
FROM EMPLEADOS T LEFT OUTER JOIN EMPLEADOS R ON T.JEFE=R.EMPLEADO

Saludos
JORGE G


"Jose Antonio" escribió en el mensaje
news:
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





Respuesta Responder a este mensaje
#2 Jose Antonio
04/02/2009 - 23:35 | Informe spam
No esa ya la prove y da este resultado que no es correcto porque los jefes
supremos son solo el 0001 y el 0006

0001 JUAN NULL
0002 JOSE 0001
0003 LUIS 0001
0004 ALBERTO 0003
0005 ALAN 0002
0006 ANTONIO NULL
0007 JAVIER 0006
0008 PEPITO 0007
0009 CARLOS 0008
0010 MARIA 0005
0011 EVA 0009
0012 CRUZ 0010
0013 ANA 0009
0014 MARIELA 0007
0015 MARIA 0003
"Jorge Guillen" escribió en el mensaje
news:e$
Prueba con este Select

SELECT T.EMPLEADO,T.NOMBRE,R.NOMBRE
FROM EMPLEADOS T LEFT OUTER JOIN EMPLEADOS R ON T.JEFE=R.EMPLEADO

Saludos
JORGE G


"Jose Antonio" escribió en el mensaje
news:
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









Respuesta Responder a este mensaje
#3 Alejandro Mesa
04/02/2009 - 23:42 | Informe spam
Jose antonio,

Espero estes usando SQL Server 2005 / 2008.

;WITH tree
AS
(
SELECT
empleado, nombre, jefe,
empleado AS jefesupremo,
nombre AS jefesupremo_nombre,
1 AS lvl
FROM EMPLEADOS
WHERE jefe IS NULL

UNION ALL

SELECT
c.empleado, c.nombre, c.jefe,
p.jefesupremo,
p.jefesupremo_nombre,
p.lvl + 1
FROM
empleados AS c INNER JOIN tree AS p
ON c.jefe = p.empleado
)
SELECT
empleado,
nombre,
NULLIF(jefesupremo, empleado)
FROM
tree
ORDER BY
jefesupremo, lvl, nombre;
GO


AMB


"Jose Antonio" wrote:

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






Respuesta Responder a este mensaje
#4 Alejandro Mesa
04/02/2009 - 23:42 | Informe spam
Se me paso darte las gracias por incluir la estructura de la tabla y data de
ejemplo.

Tambien olvide comentar la solucion, la cual se basa en una CTE recursiva,
donde la sentencia ancla (anchor - disculpa si la traduccion no es buena)
selecciona los jefes supremos y arrastra o empuja hacia debajo en la
jerarquia, sus codigos y nombres a todos los que reportan bajo ellos.


AMB


"Alejandro Mesa" wrote:

Jose antonio,

Espero estes usando SQL Server 2005 / 2008.

;WITH tree
AS
(
SELECT
empleado, nombre, jefe,
empleado AS jefesupremo,
nombre AS jefesupremo_nombre,
1 AS lvl
FROM EMPLEADOS
WHERE jefe IS NULL

UNION ALL

SELECT
c.empleado, c.nombre, c.jefe,
p.jefesupremo,
p.jefesupremo_nombre,
p.lvl + 1
FROM
empleados AS c INNER JOIN tree AS p
ON c.jefe = p.empleado
)
SELECT
empleado,
nombre,
NULLIF(jefesupremo, empleado)
FROM
tree
ORDER BY
jefesupremo, lvl, nombre;
GO


AMB


"Jose Antonio" wrote:

> 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
>
>
>
>
>
>
Respuesta Responder a este mensaje
#5 Jose Antonio
04/02/2009 - 23:51 | Informe spam
Perfecto Alejandro, gracias a ti.

Voy ha repasar el codigo que me has dado para probarlo y entenderlo.

"Alejandro Mesa" escribió en el
mensaje news:
Se me paso darte las gracias por incluir la estructura de la tabla y data
de
ejemplo.

Tambien olvide comentar la solucion, la cual se basa en una CTE recursiva,
donde la sentencia ancla (anchor - disculpa si la traduccion no es buena)
selecciona los jefes supremos y arrastra o empuja hacia debajo en la
jerarquia, sus codigos y nombres a todos los que reportan bajo ellos.


AMB


"Alejandro Mesa" wrote:

Jose antonio,

Espero estes usando SQL Server 2005 / 2008.

;WITH tree
AS
(
SELECT
empleado, nombre, jefe,
empleado AS jefesupremo,
nombre AS jefesupremo_nombre,
1 AS lvl
FROM EMPLEADOS
WHERE jefe IS NULL

UNION ALL

SELECT
c.empleado, c.nombre, c.jefe,
p.jefesupremo,
p.jefesupremo_nombre,
p.lvl + 1
FROM
empleados AS c INNER JOIN tree AS p
ON c.jefe = p.empleado
)
SELECT
empleado,
nombre,
NULLIF(jefesupremo, empleado)
FROM
tree
ORDER BY
jefesupremo, lvl, nombre;
GO


AMB


"Jose Antonio" wrote:

> 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
>
>
>
>
>
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida