none
Duplicar Registro SQL Server RRS feed

  • Pregunta

  • Buenas noches a todos, 

    Tengo una duda puede que sea tonta pero no logro solucionarlo, tengo varios campos <campo1 primary key>, <campoEmision>, <campoEquivalente> en la siguiente estructura


    pero quiero que quede asi cuando yo haga el select

    que en la consulta el campo pk aparezca dos veces pero en el campo nuevo aparecen los dos valores el del campoEmision y el del CampoEquivalente

    Mil gracias de antemano, espero puedan ayudarme prontamente




    • Editado Maurohh miércoles, 19 de agosto de 2015 0:44
    miércoles, 19 de agosto de 2015 0:37

Respuestas

  • Hola Maurohh,

    Tienes varias opciones para resolver el requerimiento que tienes. Puedes hacer lo siguiente:

    WITH CTE AS (
        SELECT CampoPk, CampoEmision AS [CampoNuevo] FROM MiTabla
        UNION ALL
        SELECT CampoPk, CampoEquivalente FROM MiTabla)
    SELECT * FROM CTE ORDER BY id;
    

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ
    • Editado Willams Morales miércoles, 19 de agosto de 2015 0:55
    • Marcado como respuesta Maurohh miércoles, 19 de agosto de 2015 12:57
    miércoles, 19 de agosto de 2015 0:53
  • Hola,

    Puedes probar así:

    DECLARE @t TABLE
    (
    CampoPk int,
    CampoEmision int,
    CampoEquivalente int
    )
    
    INSERT INTO @t(CampoPk, CampoEmision, CampoEquivalente)
    SELECT 0, 1234, 2345 union all
    SELECT 1, 123, 6789;
    
    SELECT
    	Y.CampoPk,
    	Y.CampoNuevo
    FROM
    	@t AS T
    	CROSS APPLY
    	(
    	SELECT 
    		X.CampoPk, X.CampoNuevo
    	FROM
    	    (
    	    VALUES
    	        (T.CampoPk, T.CampoEmision),
    	        (T.CampoPk, T.CampoEquivalente)
    	    ) AS X(CampoPk, CampoNuevo)	
    	 ) AS Y

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    • Marcado como respuesta Maurohh miércoles, 19 de agosto de 2015 12:57
    miércoles, 19 de agosto de 2015 0:56
  • Hola Maurohh,

    Otra opción es la que te propone SteveMorrison aunque un CROSS APPLY conceptualmente es como un CROSS JOIN (en lo personal no me gusta mucho), pero la opción está puesta ahí para que la analices. 

    Otra opción es pivotear las columnas a filas y para ello puedes usar el operador relacional UNPIVOT, veo que SteveMorrison tiene en su blog unos ejemplos que podrían servirte.

    • Marcado como respuesta Maurohh miércoles, 19 de agosto de 2015 12:57
    miércoles, 19 de agosto de 2015 3:35

Todas las respuestas

  • Hola Maurohh,

    Tienes varias opciones para resolver el requerimiento que tienes. Puedes hacer lo siguiente:

    WITH CTE AS (
        SELECT CampoPk, CampoEmision AS [CampoNuevo] FROM MiTabla
        UNION ALL
        SELECT CampoPk, CampoEquivalente FROM MiTabla)
    SELECT * FROM CTE ORDER BY id;
    

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ
    • Editado Willams Morales miércoles, 19 de agosto de 2015 0:55
    • Marcado como respuesta Maurohh miércoles, 19 de agosto de 2015 12:57
    miércoles, 19 de agosto de 2015 0:53
  • Hola,

    Puedes probar así:

    DECLARE @t TABLE
    (
    CampoPk int,
    CampoEmision int,
    CampoEquivalente int
    )
    
    INSERT INTO @t(CampoPk, CampoEmision, CampoEquivalente)
    SELECT 0, 1234, 2345 union all
    SELECT 1, 123, 6789;
    
    SELECT
    	Y.CampoPk,
    	Y.CampoNuevo
    FROM
    	@t AS T
    	CROSS APPLY
    	(
    	SELECT 
    		X.CampoPk, X.CampoNuevo
    	FROM
    	    (
    	    VALUES
    	        (T.CampoPk, T.CampoEmision),
    	        (T.CampoPk, T.CampoEquivalente)
    	    ) AS X(CampoPk, CampoNuevo)	
    	 ) AS Y

    Saludos!


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Herbert Mendoza

    • Marcado como respuesta Maurohh miércoles, 19 de agosto de 2015 12:57
    miércoles, 19 de agosto de 2015 0:56
  • Hola Maurohh,

    Tienes varias opciones para resolver el requerimiento que tienes. Puedes hacer lo siguiente:

    WITH CTE AS (
        SELECT CampoPk, CampoEmision AS [CampoNuevo] FROM MiTabla
        UNION ALL
        SELECT CampoPk, CampoEquivalente FROM MiTabla)
    SELECT * FROM CTE ORDER BY id;

    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.

    Willams Morales
    Arequipa - PERÚ
    Gracias Williams, me dices que tengo varias opciones, me podrias indicar que otras opciones? ya que quiero ver cual es la mejor para usar en mi caso. Mil gracias
    miércoles, 19 de agosto de 2015 1:57
  • Hola Maurohh,

    Otra opción es la que te propone SteveMorrison aunque un CROSS APPLY conceptualmente es como un CROSS JOIN (en lo personal no me gusta mucho), pero la opción está puesta ahí para que la analices. 

    Otra opción es pivotear las columnas a filas y para ello puedes usar el operador relacional UNPIVOT, veo que SteveMorrison tiene en su blog unos ejemplos que podrían servirte.

    • Marcado como respuesta Maurohh miércoles, 19 de agosto de 2015 12:57
    miércoles, 19 de agosto de 2015 3:35
  • mas difícil de entender quizá pero mas pontente, se me antoja

    declare @t table(campopk int, campoemision int,campoequivalente int)
    insert into  @t values (0,1234,2345),(1,123,6789)
    select derv.*
    from @t cross apply (select campopk,campoemision as camponuevo
    					  union all
    					  select campopk,campoequivalente as camponuevo) derv


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    miércoles, 19 de agosto de 2015 7:40
    Moderador