none
Trasponer Columna a Fila RRS feed

  • Pregunta

  • Hola a todos.
    El título no es muy acertado pero no sabía bien como ponerlo. 
    Antes de explicarlo voy a poner el ejemplo de lo que quiero, que es más claro:

    /***TABLA 1***/
    ID Nombre Sueldo Direccion
    1 Jaime 2300 Calle de la esquinita 3 2 Juan 1900 Calle Falsa 123
    /***TABLA 2***/
    ID Nombre Salario Direccion 1 Jaime 2430 Esquinita 3 2 Juan 1905 Calle Falsa 123

    /***TABLA 3***/
    Sueldo_tabla1 salario_tabla2
    Direccion_tabla1 direccion_tabla2

    /* RESULTADO QUE TIENE QUE MOSTRAR*/
    ID Nombre Campos p1 p2
    1 Jaime sueldo 2300 2430
    1 Jaime direccion         Calle de la esquinita 3 Esquinita 3
    2 Juan sueldo 1900 1905
    2 Juan direccion         Calle Falsa 123 Calle Falsa 123


    Tengo dos tablas que contienen el mismo tipo de información, pero de fuentes distintas, y las tengo que juntar, en este caso, por dos datos (ID y Nombre) y mostrarla de la forma descrita.

    Tambien hay una tercera tabla que relaciona campos de la primera y la segunda

    • Editado 0xKr viernes, 23 de noviembre de 2018 10:10
    viernes, 23 de noviembre de 2018 8:56

Respuestas

  • Interesante Hunchback, aunque debo confesar que no se si es por el formato que el usuario ha usado para mostrar el resultado esperado, en especial:

    ID Nombre  Campos p1  p2
    1 Jaime  sueldo 2300  2430
    1 Jaime  direccion         Calle de la esquinita 3

    Porque como bien dices, para p1 usa un monto y para la segunda fila una direccion, coincido contigo, ni idea de que quiere usar ese resultado.


    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    viernes, 23 de noviembre de 2018 13:48

Todas las respuestas

  • Lo que estas tratando de hacer no creo que sea viable, al menos no desde mi perspectiva, porque no estas transponiendo (el termino correcto es pivotear y el comando en TSQL es PIVOT).  Te comentaba que no es posible porque quieres combinar dentro de un mismo resultado columnas diferentes ademas de duplicar los primeros valores de las primeras columnas, si puedes plantear mejor que salida requieres, pero por lo visto hasta ahora no lo veo posible, te recomiendo el libro TSQL Fundamentals de Itzik BenGan, es un recurso muy valioso y te permitira entender en una forma clara como trabaja el lenguaje TSQL.

    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    viernes, 23 de noviembre de 2018 11:01
  • La operacion se conoce como UNPIVOT (transponer columnas a filas) y aca te dejo el script que devuelve el resultado esperado, aunque me quedo con la duda de cual sera el uso de ese resultado.

    WITH R1 AS (
    SELECT
    	COALESCE(T1.ID, T2.ID) AS ID,
    	COALESCE(T1.Nombre, T2.Nombre) AS Nombre,
    	T1.Sueldo AS Sueldo_1,
    	T2.Sueldo AS Sueldo_2,
    	T1.Direccion AS Direccion_1,
    	T2.Direccion AS Direccion_2
    FROM
    	@T1 AS T1
    	FULL OUTER JOIN
    	@T2 AS T2
    	ON T2.ID = T1.ID
    )
    SELECT
    	R1.ID,
        R1.Nombre,
    	R2.Campo,
        R2.valor_T1,
        R2.valor_T2
    FROM
    	R1
    	CROSS APPLY
    	(
    	VALUES
    		('Sueldo', CAST(Sueldo_1 AS sql_variant), CAST(Sueldo_2 AS sql_variant)),
    		('Direccion', CAST(Direccion_1 AS sql_variant), CAST(Direccion_2 AS sql_variant))
    	) AS R2(Campo, valor_T1, valor_T2);

    La idea es unir ambas tablas por la columna [ID] y luego usar el operador APPLY para simular la operacion de UNPIVOT.

    Como te daras cuenta, los tipos de datos se pierden durante la operacion ya que para almacenar lost tipo caracteres y o moneda bajo una misma columna se deberan convertir al tipo apropiado (ejemplo: los dos a caracter o como sugeri a sql_variant).


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    viernes, 23 de noviembre de 2018 13:26
  • Interesante Hunchback, aunque debo confesar que no se si es por el formato que el usuario ha usado para mostrar el resultado esperado, en especial:

    ID Nombre  Campos p1  p2
    1 Jaime  sueldo 2300  2430
    1 Jaime  direccion         Calle de la esquinita 3

    Porque como bien dices, para p1 usa un monto y para la segunda fila una direccion, coincido contigo, ni idea de que quiere usar ese resultado.


    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    viernes, 23 de noviembre de 2018 13:48