none
Se puede realizar esto mediante una consulta¿? RRS feed

  • Pregunta

  • Tengo una tabla, dos de sus campos son los que me interesan y supongamos que tienen los siguientes registros

    Original     Renovado

    A1             A2

    A2             A3

    A3             A4

    Mi pregunta es, cómo puedo recuperar A1 mediante una consulta, si sólo tengo A4. Sé que esto es fácil hacerlo con algún cursor, ciclo o algo parecido, pero el problema es que si hago eso tendría que modificar bastante un módulo, y es lo que quiero evitar, mi pregunta es sí se puede hacer esto mediante un select¿?. Les agradesco mucho atención

    miércoles, 18 de julio de 2012 16:35

Respuestas

  • Asumiendo que cada valor de [Renovado] macha con un solo valor de [Original], pudiers seguir la cadena usando una CTE recursiva, tal como haces para recorrer una jerarquia.

    SET NOCOUNT ON;
    USE tempdb;
    GO
    DECLARE @T TABLE (
    Original char(2) NOT NULL,
    Renovado char(2) NOT NULL
    );
    INSERT INTO @T (Original, Renovado)
    VALUES
    	('A1', 'A2'),
    	('A2', 'A3'),
    	('A3', 'A4');
    DECLARE @Renovado char(2) = 'A4';
    WITH R AS (
    SELECT
    	Original,
    	Renovado,
    	1 AS cnt
    FROM
    	@T
    WHERE
    	Renovado = @Renovado
    UNION ALL
    SELECT
    	P.Original,
    	P.Renovado,
    	C.cnt + 1
    FROM
    	R AS C
    	INNER JOIN
    	@T AS P
    	ON C.Original = P.Renovado
    )
    SELECT TOP (1)
    	Original
    FROM
    	R
    ORDER BY
    	ROW_NUMBER() OVER(ORDER BY cnt DESC);
    GO


    AMB

    Some guidelines for posting questions...

    • Propuesto como respuesta alfred_magno miércoles, 18 de julio de 2012 18:28
    • Marcado como respuesta razielx4crazy miércoles, 18 de julio de 2012 20:35
    miércoles, 18 de julio de 2012 17:38

Todas las respuestas

  • Cual es la relacion entre A1 y A4? El data type?

    This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" and "Vote as Helpful" on posts that help you. This can be beneficial to other community members reading the thread.

    miércoles, 18 de julio de 2012 17:16
  • Asumiendo que cada valor de [Renovado] macha con un solo valor de [Original], pudiers seguir la cadena usando una CTE recursiva, tal como haces para recorrer una jerarquia.

    SET NOCOUNT ON;
    USE tempdb;
    GO
    DECLARE @T TABLE (
    Original char(2) NOT NULL,
    Renovado char(2) NOT NULL
    );
    INSERT INTO @T (Original, Renovado)
    VALUES
    	('A1', 'A2'),
    	('A2', 'A3'),
    	('A3', 'A4');
    DECLARE @Renovado char(2) = 'A4';
    WITH R AS (
    SELECT
    	Original,
    	Renovado,
    	1 AS cnt
    FROM
    	@T
    WHERE
    	Renovado = @Renovado
    UNION ALL
    SELECT
    	P.Original,
    	P.Renovado,
    	C.cnt + 1
    FROM
    	R AS C
    	INNER JOIN
    	@T AS P
    	ON C.Original = P.Renovado
    )
    SELECT TOP (1)
    	Original
    FROM
    	R
    ORDER BY
    	ROW_NUMBER() OVER(ORDER BY cnt DESC);
    GO


    AMB

    Some guidelines for posting questions...

    • Propuesto como respuesta alfred_magno miércoles, 18 de julio de 2012 18:28
    • Marcado como respuesta razielx4crazy miércoles, 18 de julio de 2012 20:35
    miércoles, 18 de julio de 2012 17:38
  • Es correcto, es lo que estaba buscando muchas gracias!!
    miércoles, 18 de julio de 2012 20:36