none
Pasar columas a filas datos de consulta sql2008r2 RRS feed

  • Pregunta

  • Buenos dias
    Estoy usando SQL server 2008R2, tengo mi tabla Cotizaciones,debo obtener el listado de cotizaciones por solictud ejecutando este query:
    SELECT  IDCOTIZACION, FCHCOT, MONEDA, SUBTOTAL,IGV,TOTAL,VIGENCIA,TIEMPOENTREGA FROM COTIZACION WHERE IDSOLICITUD = 1256
    lo cual me muestra:
    IDCOTIZACION FCHCOT MONEDA SUBTOTAL IGV TOTAL VIGENCIA TIEMPOENTREGA
    17 27/10/2017 SOLES  655.08 117.92 773 15 4
    18 27/10/2017 SOLES  825 148.5 973.5 7 7
    19 27/10/2017 SOLES  819 147.42 966.42 7 8
    como hago para que la consulta se muestre de manera horizontal y que si hay mas cotizaciones se agreguen mas columnas. por ejemplo?
    IDCOTIZACION 17 18 19
    FCHCOT 27/10/2017 27/10/2017 27/10/2017
    MONEDA SOLES  SOLES  SOLES 
    SUBTOTAL 655.08 825 819
    IGV 117.92 148.5 147.42
    TOTAL 773 973.5 966.42
    VIGENCIA 15 7 7
    TIEMPOENTREGA 4 7 8

    Alguien tiene un ejemplo de como hacerlo? 

    Gracias, 

    lunes, 30 de octubre de 2017 15:38

Respuestas

  • Aca te dejo un query estatico (suponiendo que solo tendremos esas tres cotizaciones).

    DECLARE @T table (
    DCOTIZACION int,
    FCHCOT date,
    MONEDA varchar(15),
    SUBTOTAL decimal(8, 2),
    IGV decimal(8, 2),
    TOTAL int,
    VIGENCIA int,
    TIEMPOENTREGA int
    );
    
    INSERT INTO @T (
    	DCOTIZACION,
    	FCHCOT,
    	MONEDA,
    	SUBTOTAL,
    	IGV,
    	TOTAL,
    	VIGENCIA,
    	TIEMPOENTREGA
    	)
    VALUES
    	(17, '20171027', 'SOLES', 655.08, 117.92, 773, 15, 4),
    	(18, '20171027', 'SOLES', 825, 148.5, 973.5, 7, 7),
    	(19, '20171027', 'SOLES', 819, 147.42, 966.42, 7, 8);
    
    SELECT
    	*
    FROM
    	@T;
    
    SELECT
    	col1,
    	MAX(col2) AS col20,
    	MAX(col3) AS col30,
    	MAX(col4) AS col40
    FROM
    	@T
    	CROSS APPLY
    	(
    	VALUES
    		('DCOTIZACION', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN DCOTIZACION END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN DCOTIZACION END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN DCOTIZACION END AS sql_variant)),
    		('FCHCOT', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN FCHCOT END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN FCHCOT END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN FCHCOT END AS sql_variant)),
    		('MONEDA', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN MONEDA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN MONEDA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN MONEDA END AS sql_variant)),
    		('SUBTOTAL', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN SUBTOTAL END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN SUBTOTAL END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN SUBTOTAL END AS sql_variant)),
    		('IGV', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN IGV END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN IGV END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN IGV END AS sql_variant)),
    		('TOTAL', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN TOTAL END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN TOTAL END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN TOTAL END AS sql_variant)),
    		('VIGENCIA',
    			CAST(CASE WHEN DCOTIZACION = 17 THEN VIGENCIA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN VIGENCIA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN VIGENCIA END AS sql_variant)),
    		('TIEMPOENTREGA', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN TIEMPOENTREGA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN TIEMPOENTREGA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN TIEMPOENTREGA END AS sql_variant))
    	) AS R(col1, col2, col3, col4)
    GROUP BY
    	R.col1;
    GO

    En caso de que los valores sean dinamicos, tendras que primero calcular la cantidad de cotizaciones y armar un query donde cada columna dependa del numero de la cotizacion.


    AMB

    Some guidelines for posting questions...

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


    lunes, 30 de octubre de 2017 19:03

Todas las respuestas

  • Es con cubos ....

    Fuente Aqui


    Si necesitas ayuda sube tu avance de otro modo no puedo ayudarte , Suerte!

    lunes, 30 de octubre de 2017 16:25
  • Aca te dejo un query estatico (suponiendo que solo tendremos esas tres cotizaciones).

    DECLARE @T table (
    DCOTIZACION int,
    FCHCOT date,
    MONEDA varchar(15),
    SUBTOTAL decimal(8, 2),
    IGV decimal(8, 2),
    TOTAL int,
    VIGENCIA int,
    TIEMPOENTREGA int
    );
    
    INSERT INTO @T (
    	DCOTIZACION,
    	FCHCOT,
    	MONEDA,
    	SUBTOTAL,
    	IGV,
    	TOTAL,
    	VIGENCIA,
    	TIEMPOENTREGA
    	)
    VALUES
    	(17, '20171027', 'SOLES', 655.08, 117.92, 773, 15, 4),
    	(18, '20171027', 'SOLES', 825, 148.5, 973.5, 7, 7),
    	(19, '20171027', 'SOLES', 819, 147.42, 966.42, 7, 8);
    
    SELECT
    	*
    FROM
    	@T;
    
    SELECT
    	col1,
    	MAX(col2) AS col20,
    	MAX(col3) AS col30,
    	MAX(col4) AS col40
    FROM
    	@T
    	CROSS APPLY
    	(
    	VALUES
    		('DCOTIZACION', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN DCOTIZACION END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN DCOTIZACION END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN DCOTIZACION END AS sql_variant)),
    		('FCHCOT', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN FCHCOT END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN FCHCOT END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN FCHCOT END AS sql_variant)),
    		('MONEDA', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN MONEDA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN MONEDA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN MONEDA END AS sql_variant)),
    		('SUBTOTAL', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN SUBTOTAL END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN SUBTOTAL END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN SUBTOTAL END AS sql_variant)),
    		('IGV', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN IGV END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN IGV END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN IGV END AS sql_variant)),
    		('TOTAL', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN TOTAL END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN TOTAL END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN TOTAL END AS sql_variant)),
    		('VIGENCIA',
    			CAST(CASE WHEN DCOTIZACION = 17 THEN VIGENCIA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN VIGENCIA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN VIGENCIA END AS sql_variant)),
    		('TIEMPOENTREGA', 
    			CAST(CASE WHEN DCOTIZACION = 17 THEN TIEMPOENTREGA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 18 THEN TIEMPOENTREGA END AS sql_variant),
    			CAST(CASE WHEN DCOTIZACION = 19 THEN TIEMPOENTREGA END AS sql_variant))
    	) AS R(col1, col2, col3, col4)
    GROUP BY
    	R.col1;
    GO

    En caso de que los valores sean dinamicos, tendras que primero calcular la cantidad de cotizaciones y armar un query donde cada columna dependa del numero de la cotizacion.


    AMB

    Some guidelines for posting questions...

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


    lunes, 30 de octubre de 2017 19:03