Ayuda para extraer datos que están en fila, pero ponerlos en columna

Tengo una tabla con los datos de la siguiente manera:

unidad, ruta, salida, llegada, origen, destino, hr programada, hora real.

Como todo esto esta cada uno de los tramos recorridos, lo que necesito hacer es que en una fila me saque todo lo recorridos del camión.

es decir:

unidad, ruta, salida origenx, destinox hr progx, hr realx, origeny, destinoy, hr progy, hr realy... Y así sucesivamente hasta la llegada, hay una manera rápida en sentencias

1 Respuesta

Respuesta
1

Si no conoces la cantidad exacta de tramos, no se puede hacer vía Transact SQL hacia el lado... De manera sencilla y "limpia".

Si usas SQL Server se puede hacer, construyendo la consulta SQL con un ciclo WHILE y luego ejecutándola...

Si es Access, revisa este tema... te puede dar algunas luces

http://stackoverflow.com/questions/1802120/building-sql-strings-in-access-vba

si es sql server, con while como me sugieres que sea?

Se me olvido comentarte que son varias rutas, por eso el while seria doble o que me puedes instruir, yo había pensado crear unas vistas por cada ruta y en e esta ponerle todos los tramos de la ruta, pero pensé que se podía con programación. en sql transac.

Puede ser con un While y un Cursor (ambos) o puedes hacerlo con un solo SELECT... Ambas alternativas son análogas, pero la primera requiere más líneas de código, pero la segunda es más compleja de implementar...

Lo que tienes que tener presente es que por cada ciclo tienes que generar las columnas y un join para la misma tabla... Como ejemplo para que me entiendas la idea:

DECLARE @Cols VARCHAR(MAX)
Declare @join varchar(max)
SELECT @Cols = @Cols + ', Tabla' + LTRIM(STR(ROW_NUMBER())) + '.campo1, Tabla' + LTRIM(STR(ROW_NUMBER())) + '.campo2, ',
       @Join = @Join + 'INNER JOIN MiTabla Tabla' + LTRIM(STR(ROW_NUMBER())) + ' ON MiTabla.campo1 = Tabla' + LTRIM(STR(ROW_NUMBER())) + '.campo 1 '
FROM   MiTabla
WHERE  MiTabla.campo1 = 'algo'
SET @Cols = 'SELECT ' + @Cols + ' FROM MiTabla ' + @Join + ' WHERE MiTabla.campo1 = ''algo'''
--PRINT @Cols
EXEC(@Cols)

Esa es un poco la idea... en una variable ir generando las columnas dinámicas y en otra los join con la misma tabla... La consulta para generar esas variables tiene que ser inteligente, en el sentido que debe traer las rutas comunes (y no comunes) para todas las unidades que listarás... Y además que no se repitan... Por ejemplo:

Unidad Ruta
Unidad1 Ciudad1
Unidad2 Ciudad1
Unidad2 Ciudad2

En ese ejemplo, sólo deberías traer la Ciudad1 y Ciudad2 para ambas unidades...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas