Calcular niveles profundidad

14/03/2005 - 01:42 por Carlos Rodriguez | Informe spam
Tengo una tabla cartacuentas (cuenta, nombre, padre), donde padre es la
cuenta "padre" de "cuenta".

Ej. cuenta nombre padre Nivel
1 activos 1
11 activos corrientes 1 2
111 cajas 11 3
2 pasivos 1
21 pasivos corrients 2 2

y asi por el estilo

Necesito hacer una funcion o sp que dada una cuenta, calcular el nivel de
profundidad en que se encuentra.

Veo que debe ser recursivo. Lo que busco es una orientacion.

Gracias
Carlos

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
14/03/2005 - 01:53 | Informe spam
Puede ser que no he entendido la estructura de la tabla que muestras...

... no almacenas justamente en ella el nivel de cada cuenta? Qué
representa ese valor 'nivel' que tienes alli?

Gustavo Larriera
Uruguay LatAm
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Blog: http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.



"Carlos Rodriguez" wrote in message
news::
Tengo una tabla cartacuentas (cuenta, nombre, padre), donde padre es la
cuenta "padre" de "cuenta".

Ej. cuenta nombre padre Nivel
1 activos
1
11 activos corrientes 1 2
111 cajas 11 3
2 pasivos
1
21 pasivos corrients 2 2

y asi por el estilo

Necesito hacer una funcion o sp que dada una cuenta, calcular el nivel
de
profundidad en que se encuentra.

Veo que debe ser recursivo. Lo que busco es una orientacion.

Gracias
Carlos
Respuesta Responder a este mensaje
#2 Carlos Rodriguez
14/03/2005 - 02:45 | Informe spam

... no almacenas justamente en ella el nivel de cada cuenta? Qué
representa ese valor 'nivel' que tienes alli?




representa el valor que debo calcular (el nivel de profundidad a que se
encuentra cada cuenta). Es una estructura de arbol, o una relacion
recursiva: "Una cuenta es Hija de otra cuenta".
Respuesta Responder a este mensaje
#3 Rubén Vigón
14/03/2005 - 11:12 | Informe spam
Hola Carlos,

Si no me equivoco, mi «IdFamilia» equivaldría a tu «cuenta» y mi «IdFamiliaPadre» a tu «padre»:

CREATE FUNCTION udfNivelFamilia (@IdFamilia smallint)
RETURNS tinyint AS
BEGIN
DECLARE @IdFamiliaPadre smallint, @Result tinyint
SET @Result = 0
SELECT @IdFamiliaPadre = IdFamiliaPadre FROM Familias WHERE IdFamilia = @IdFamilia
WHILE @IdFamiliaPadre != 0 BEGIN
SELECT @IdFamiliaPadre = IdFamiliaPadre FROM Familias WHERE IdFamilia = @IdFamiliaPadre
SET @Result = @Result + 1
END
RETURN @Result
END

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvp-access.com
Respuesta Responder a este mensaje
#4 Carlos Rodriguez
16/03/2005 - 06:19 | Informe spam
Muchas gracias.. Justo era eso.


"Rubén Vigón" wrote in message
news:
Hola Carlos,

Si no me equivoco, mi «IdFamilia» equivaldría a tu «cuenta» y mi
«IdFamiliaPadre» a tu «padre»:

CREATE FUNCTION udfNivelFamilia (@IdFamilia smallint)
RETURNS tinyint AS
BEGIN
DECLARE @IdFamiliaPadre smallint, @Result tinyint
SET @Result = 0
SELECT @IdFamiliaPadre = IdFamiliaPadre FROM Familias WHERE IdFamilia @IdFamilia
WHILE @IdFamiliaPadre != 0 BEGIN
SELECT @IdFamiliaPadre = IdFamiliaPadre FROM Familias WHERE
IdFamilia = @IdFamiliaPadre
SET @Result = @Result + 1
END
RETURN @Result
END

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvp-access.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida