Principales respuestas
Se puede realizar esto mediante una consulta¿?

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
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
- 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
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.
-
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
- 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
-