Se puede hacer con un select ?

27/10/2009 - 05:20 por Nelson | Informe spam
Quitando los detalles tengo una tabla con algo como esto:

Rutas
-
parada1, parada2

A B
A C
B D
D E

Si me piden sacar la "ruta" desde A hasta E, debe sacarme un varchar con
'A-B-D-E'.

Se que lo puedo hacer con un cursor recorriendo los registros pero me han
dicho que no se aconseja.

Hay manera de hacerlo con un select ? alguna orientacion que me puedan dar
pues no lo entiendo

Grax

ss2008

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
27/10/2009 - 11:09 | Informe spam
Con los datos que has enviado la ruta no tiene por qué ser esa. Fíjate que
en "parada1" aparece dos veces "A", así que la ruta podría ser A-C o A-B-D-E

Suponiendo que el registro A-C es erróneo, una solución podría ser:

***************************************************************************************

declare @inicio char(1)
set @inicio = 'A'
;WITH viaje(desde, hasta, numParada) AS
(
SELECT Desde, hasta, 2 AS numParada
FROM rutas
WHERE desde = @inicio
UNION ALL
SELECT r.desde, r.hasta, numParada + 1
FROM rutas r
INNER JOIN viaje v
ON v.hasta = r.desde
)
SELECT @inicio AS parada, 1 AS numParada
UNION
SELECT hasta, numParada
FROM viaje;

***************************************************************************************

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:%
Quitando los detalles tengo una tabla con algo como esto:

Rutas
-
parada1, parada2

A B
A C
B D
D E

Si me piden sacar la "ruta" desde A hasta E, debe sacarme un varchar con
'A-B-D-E'.

Se que lo puedo hacer con un cursor recorriendo los registros pero me han
dicho que no se aconseja.

Hay manera de hacerlo con un select ? alguna orientacion que me puedan
dar pues no lo entiendo

Grax

ss2008

Respuesta Responder a este mensaje
#2 Nelson
27/10/2009 - 13:33 | Informe spam
En realidad A-C no es erróneo, es solo otra posibilidad similar a A-B. Es
algo parecido a rutas de vuelo: ejemplo sale un vuelo desde el punto A al C
pero sale otro desde A a B, and so on..

Si me pidieran la ruta de A hasta C pues el resultado sería simplemente A-C.
Pero como me lo piden hasta E, como el ejemplo, tengo que "irme" por "B".

De todas maneras gracias por la ayuda, creo que me sirve de pie para
resolverlo, voy a analizarlo ya que en realidad no había utilizado ese tipo
de instrucción con WITH (CTE, segun vi en la ayuda).
Sé que es recursivo pero me confunde la sintaxis para interpretarlo en
relacion a lo que uno entiende como funcion recursiva.

Gracias


"Carlos Sacristan" wrote in message
news:%
Con los datos que has enviado la ruta no tiene por qué ser esa. Fíjate que
en "parada1" aparece dos veces "A", así que la ruta podría ser A-C o
A-B-D-E

Suponiendo que el registro A-C es erróneo, una solución podría ser:

***************************************************************************************

declare @inicio char(1)
set @inicio = 'A'
;WITH viaje(desde, hasta, numParada) AS
(
SELECT Desde, hasta, 2 AS numParada
FROM rutas
WHERE desde = @inicio
UNION ALL
SELECT r.desde, r.hasta, numParada + 1
FROM rutas r
INNER JOIN viaje v
ON v.hasta = r.desde
)
SELECT @inicio AS parada, 1 AS numParada
UNION
SELECT hasta, numParada
FROM viaje;

***************************************************************************************

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:%
Quitando los detalles tengo una tabla con algo como esto:

Rutas
-
parada1, parada2

A B
A C
B D
D E

Si me piden sacar la "ruta" desde A hasta E, debe sacarme un varchar con
'A-B-D-E'.

Se que lo puedo hacer con un cursor recorriendo los registros pero me han
dicho que no se aconseja.

Hay manera de hacerlo con un select ? alguna orientacion que me puedan
dar pues no lo entiendo

Grax

ss2008




Respuesta Responder a este mensaje
#3 Carlos Sacristan
27/10/2009 - 13:56 | Informe spam
Entonces nos faltan datos para saber qué ruta coger cuando hay varios
comienzos; en realidad lo mismo pasaría con el resto de "paradas", es
necesario identificar la ruta a seguir.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:
En realidad A-C no es erróneo, es solo otra posibilidad similar a A-B. Es
algo parecido a rutas de vuelo: ejemplo sale un vuelo desde el punto A al
C pero sale otro desde A a B, and so on..

Si me pidieran la ruta de A hasta C pues el resultado sería simplemente
A-C.
Pero como me lo piden hasta E, como el ejemplo, tengo que "irme" por "B".

De todas maneras gracias por la ayuda, creo que me sirve de pie para
resolverlo, voy a analizarlo ya que en realidad no había utilizado ese
tipo de instrucción con WITH (CTE, segun vi en la ayuda).
Sé que es recursivo pero me confunde la sintaxis para interpretarlo en
relacion a lo que uno entiende como funcion recursiva.

Gracias


"Carlos Sacristan" wrote in message
news:%
Con los datos que has enviado la ruta no tiene por qué ser esa. Fíjate
que en "parada1" aparece dos veces "A", así que la ruta podría ser A-C o
A-B-D-E

Suponiendo que el registro A-C es erróneo, una solución podría ser:

***************************************************************************************

declare @inicio char(1)
set @inicio = 'A'
;WITH viaje(desde, hasta, numParada) AS
(
SELECT Desde, hasta, 2 AS numParada
FROM rutas
WHERE desde = @inicio
UNION ALL
SELECT r.desde, r.hasta, numParada + 1
FROM rutas r
INNER JOIN viaje v
ON v.hasta = r.desde
)
SELECT @inicio AS parada, 1 AS numParada
UNION
SELECT hasta, numParada
FROM viaje;

***************************************************************************************

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:%
Quitando los detalles tengo una tabla con algo como esto:

Rutas
-
parada1, parada2

A B
A C
B D
D E

Si me piden sacar la "ruta" desde A hasta E, debe sacarme un varchar con
'A-B-D-E'.

Se que lo puedo hacer con un cursor recorriendo los registros pero me
han dicho que no se aconseja.

Hay manera de hacerlo con un select ? alguna orientacion que me puedan
dar pues no lo entiendo

Grax

ss2008







Respuesta Responder a este mensaje
#4 Nelson
27/10/2009 - 14:27 | Informe spam
Exacto, debe ser una técnica de ensayo y error, recursivo.

"Carlos Sacristan" wrote in message
news:
Entonces nos faltan datos para saber qué ruta coger cuando hay varios
comienzos; en realidad lo mismo pasaría con el resto de "paradas", es
necesario identificar la ruta a seguir.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:
En realidad A-C no es erróneo, es solo otra posibilidad similar a A-B.
Es algo parecido a rutas de vuelo: ejemplo sale un vuelo desde el punto A
al C pero sale otro desde A a B, and so on..

Si me pidieran la ruta de A hasta C pues el resultado sería simplemente
A-C.
Pero como me lo piden hasta E, como el ejemplo, tengo que "irme" por "B".

De todas maneras gracias por la ayuda, creo que me sirve de pie para
resolverlo, voy a analizarlo ya que en realidad no había utilizado ese
tipo de instrucción con WITH (CTE, segun vi en la ayuda).
Sé que es recursivo pero me confunde la sintaxis para interpretarlo en
relacion a lo que uno entiende como funcion recursiva.

Gracias


"Carlos Sacristan" wrote in message
news:%
Con los datos que has enviado la ruta no tiene por qué ser esa. Fíjate
que en "parada1" aparece dos veces "A", así que la ruta podría ser A-C o
A-B-D-E

Suponiendo que el registro A-C es erróneo, una solución podría ser:

***************************************************************************************

declare @inicio char(1)
set @inicio = 'A'
;WITH viaje(desde, hasta, numParada) AS
(
SELECT Desde, hasta, 2 AS numParada
FROM rutas
WHERE desde = @inicio
UNION ALL
SELECT r.desde, r.hasta, numParada + 1
FROM rutas r
INNER JOIN viaje v
ON v.hasta = r.desde
)
SELECT @inicio AS parada, 1 AS numParada
UNION
SELECT hasta, numParada
FROM viaje;

***************************************************************************************

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:%
Quitando los detalles tengo una tabla con algo como esto:

Rutas
-
parada1, parada2

A B
A C
B D
D E

Si me piden sacar la "ruta" desde A hasta E, debe sacarme un varchar
con 'A-B-D-E'.

Se que lo puedo hacer con un cursor recorriendo los registros pero me
han dicho que no se aconseja.

Hay manera de hacerlo con un select ? alguna orientacion que me puedan
dar pues no lo entiendo

Grax

ss2008










Respuesta Responder a este mensaje
#5 Carlos Sacristan
27/10/2009 - 15:43 | Informe spam
¿¿?? No te entiendo...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:
Exacto, debe ser una técnica de ensayo y error, recursivo.

"Carlos Sacristan" wrote in message
news:
Entonces nos faltan datos para saber qué ruta coger cuando hay varios
comienzos; en realidad lo mismo pasaría con el resto de "paradas", es
necesario identificar la ruta a seguir.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:
En realidad A-C no es erróneo, es solo otra posibilidad similar a A-B.
Es algo parecido a rutas de vuelo: ejemplo sale un vuelo desde el punto
A al C pero sale otro desde A a B, and so on..

Si me pidieran la ruta de A hasta C pues el resultado sería simplemente
A-C.
Pero como me lo piden hasta E, como el ejemplo, tengo que "irme" por
"B".

De todas maneras gracias por la ayuda, creo que me sirve de pie para
resolverlo, voy a analizarlo ya que en realidad no había utilizado ese
tipo de instrucción con WITH (CTE, segun vi en la ayuda).
Sé que es recursivo pero me confunde la sintaxis para interpretarlo en
relacion a lo que uno entiende como funcion recursiva.

Gracias


"Carlos Sacristan" wrote in message
news:%
Con los datos que has enviado la ruta no tiene por qué ser esa. Fíjate
que en "parada1" aparece dos veces "A", así que la ruta podría ser A-C
o A-B-D-E

Suponiendo que el registro A-C es erróneo, una solución podría ser:

***************************************************************************************

declare @inicio char(1)
set @inicio = 'A'
;WITH viaje(desde, hasta, numParada) AS
(
SELECT Desde, hasta, 2 AS numParada
FROM rutas
WHERE desde = @inicio
UNION ALL
SELECT r.desde, r.hasta, numParada + 1
FROM rutas r
INNER JOIN viaje v
ON v.hasta = r.desde
)
SELECT @inicio AS parada, 1 AS numParada
UNION
SELECT hasta, numParada
FROM viaje;

***************************************************************************************

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Nelson" wrote in message
news:%
Quitando los detalles tengo una tabla con algo como esto:

Rutas
-
parada1, parada2

A B
A C
B D
D E

Si me piden sacar la "ruta" desde A hasta E, debe sacarme un varchar
con 'A-B-D-E'.

Se que lo puedo hacer con un cursor recorriendo los registros pero me
han dicho que no se aconseja.

Hay manera de hacerlo con un select ? alguna orientacion que me
puedan dar pues no lo entiendo

Grax

ss2008













Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida