Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta a Tabla

Estas en el tema de Consulta a Tabla en el foro de SQL Server en Foros del Web. Buenos dias, soy un poco nuevo en esto, ojala y alguien pueda ayudar. Tengo una tabla con los campos como sigue. Usuario Nombre Jefe email ...
  #1 (permalink)  
Antiguo 21/01/2008, 12:22
 
Fecha de Ingreso: enero-2008
Mensajes: 1
Antigüedad: 16 años, 10 meses
Puntos: 0
Consulta a Tabla

Buenos dias, soy un poco nuevo en esto, ojala y alguien pueda ayudar.



Tengo una tabla con los campos como sigue.



Usuario Nombre Jefe email

user1 user1 user2 [email protected]

user2 user2 user3 [email protected]

user3 user3 user4 [email protected]



Como poder obtener todos email de los niveles de jefe de user1. Gracias
  #2 (permalink)  
Antiguo 21/01/2008, 13:06
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Re: Consulta a Tabla

Eso se llama RECURSIVIDAD, y puedes hacerlo de esta forma, te pongo un ejemplo:

-- RECURSIVIDAD
create table tempo ( idclave int, descripcion char(10),
idpadre int )
go
insert into tempo values ( 1, 'AAA', 0 )
insert into tempo values ( 2, 'AAA', 1 )
insert into tempo values ( 3, 'AAA', 1 )
insert into tempo values ( 4, 'AAA', 2 )
insert into tempo values ( 5, 'AAA', 2 )
insert into tempo values ( 6, 'AAA', 4 )
go
create table tempodes ( iddes int, nivel int )
go

2) Grabamos en la tabla tempodes los descendientes del
parámetro solicitado (en eset caso lo pongo en una
variable):

declare @param int
SET @param = 1

declare @nivel int
DELETE FROM tempodes
INSERT INTO tempodes SELECT idclave, 1 FROM tempo WHERE
idpadre = @param
SET @nivel = 2
WHILE ( EXISTS ( SELECT iddes FROM tempodes WHERE nivel =
@nivel - 1 ) )
BEGIN
INSERT INTO tempodes SELECT idclave, @nivel FROM tempo
WHERE idpadre IN ( SELECT iddes FROM tempodes WHERE nivel
= @nivel - 1 )
SET @nivel = @nivel + 1
END

3) Si vemos el detalle de la tabla con SELECT * FROM tempodes, tenemos :

iddes nivel
----------- -----------
2 1
3 1
4 2
5 2
6 3

4) Si deseamos que todo se encuentre en una cadena :

declare @cadena varchar(1000)
SET @cadena = ''
select @cadena = @cadena + convert(varchar,iddes) + ';'
from tempodes
select @cadena

tenemos :

----------
2;3;4;5;6;
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:10.