SQL - Query recursivo

 
Vista:

Query recursivo

Publicado por Daniela (2 intervenciones) el 08/05/2007 04:23:11
Quisiera listar todo el arbol de departamentos que dependen del departamento 7 de la siguiente tabla:

DEPARTAMENTOS
Cod_departamento (PK)
Cod_departamento_padre (FK de DEPARTAMENTOS)

Por ejemplo, si tengo los siguientes valores:
Cod_Departamento Cod_departamento_padre
7 9
3 7
2 3
5 7
8 10
1 2

La consulta me tendría que devolver:
7
5
3
2
1
Es posible realizar un query que devuelva estos resultados????
Nota: no se sabe cuántos subniveles de departamentos pueden existir.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Query recursivo

Publicado por Isaías (5072 intervenciones) el 08/05/2007 19:14:10
¿Que version de base de datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Query recursivo

Publicado por Daniela (2 intervenciones) el 08/05/2007 19:17:08
sql 2000

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Query recursivo

Publicado por Isaías (5072 intervenciones) el 09/05/2007 00:14:14
Ok, te dejo un ejemplo de RECURSIVIDAD.

create function dbo.nombres (
@id int
)
returns varchar(8000)
as
begin
declare @s varchar(8000)
declare @i int

set @s = ''
set @i = @id

while exists(select * from dbo.t1 where [id] = @i)
begin
select @i = IdPadre, @s = nombre + case when @s = '' then '' else ' / ' end
+ @s
from dbo.t1
where [id] = @i
end

return @s
end
go

create function dbo.ids (
@id int
)
returns @t table ([id] int)
as
begin
declare @i int

set @i = @id

while exists(select * from dbo.t1 where [id] = @i)
begin
insert into @t values(@i)

select @i = IdPadre
from dbo.t1
where [id] = @i
end

return
end
go

create table dbo.t1 (
[id] int,
IdPadre int,
nombre varchar(25),
)
go

insert into dbo.t1 values(1, 0, 'AAA')
insert into dbo.t1 values(2, 0, 'BBB')
insert into dbo.t1 values(3, 1, 'AAA 1')
insert into dbo.t1 values(4, 1, 'AAA 2')
insert into dbo.t1 values(5, 3, 'AAA 1.1')
insert into dbo.t1 values(6, 3, 'AAA 1.2')
insert into dbo.t1 values(7, 6, 'AAA 1.2.1')
go

select [id], IdPadre, nombre, dbo.nombres([id]) as nombres
from dbo.t1
where [id] in (select [id] from dbo.ids(5))
order by [id]
go

drop table dbo.t1
go

drop function dbo.nombres, dbo.ids
go

Esta solucion tiene una gran limitacion en SQL Server 2000, pues el maximo
varchar es 8000.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Query recursivo

Publicado por lalala (1 intervención) el 08/07/2010 21:35:28
no entiendo tu webada de pregunta xD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar