none
Organizar una consulta para que muestre totales por fila y por columna RRS feed

  • Pregunta

  • Cordial saludo, actualmente tengo la siguiente tabla:

    VEHICULOS FECHA ESTADO_VIAJE
    VD-212 16/07/2020  CANCELADO
    VD-212 15/07/2020  TERMINADO
    VD-212 14/07/2020  CANCELADO
    VD-217 16/07/2020  TERMINADO
    VD-217 15/07/2020  TERMINADO

    Deseo que los registros del campo ESTADO_VIAJE se vuelvan campos y luego totalizar por VEHICULO (por filas) y por ESTADO_VIAJE (por columnas) la cantidad de fechas. en definitiva, esto es lo que quiero lograr.

    VEHICULOS TERMINADO CANCELADO TOTAL FILAS
    VD-212 1 2 3
    VD-217 2 0 2
    TOTAL COLUMNAS 3 2 5

    Agradezco su ayuda


    Germanq

    jueves, 16 de julio de 2020 13:57

Respuestas

  • Hola German David Quinchia Zapata:

    Puedes realizar esto utilizando un pivot, para trasponer las filas por columnas. Y luego con un union All, sumar los totales.

    set dateformat dmy;
    
    declare @VEHICULOSFECHA table
    							  (
    							  VEHICULOS    VARCHAR(6)
    							, FECHA        DATE
    							, ESTADO_VIAJE VARCHAR(20)
    							  );
    
    Insert into @VEHICULOSFECHA(VEHICULOS
    						  , FECHA
    						  , ESTADO_VIAJE)
    Values
    	   ( 'VD-212', '16/07/2020', 'CANCELADO' ),
    	   ( 'VD-212', '15/07/2020', 'TERMINADO' ),
    	   ( 'VD-212', '14/07/2020', 'CANCELADO' ),
    	   ( 'VD-217', '16/07/2020', 'TERMINADO' ),
    	   ( 'VD-217', '15/07/2020', 'TERMINADO' );
    
    With cte
    	 as (Select pvt.VEHICULOS
    			  , pvt.TERMINADO
    			  , pvt.CANCELADO
    				from (
    					   Select t.VEHICULOS
    							, t.FECHA
    							, t.ESTADO_VIAJE
    							  from @VEHICULOSFECHA AS t
    					 ) as source pivot(count(fecha) for Estado_viaje in(CANCELADO
    																	  , TERMINADO)) as pvt)
    	 select c.VEHICULOS
    		  , c.TERMINADO
    		  , c.CANCELADO
    		  , c.TERMINADO + c.CANCELADO as [Total Filas]
    			from cte AS c
    	 union all
    	 Select 'TOTAL COLUMNAS'
    		  , SUM(C.TERMINADO)
    		  , SUM(C.CANCELADO)
    		  , SUM(c.TERMINADO + c.CANCELADO)
    			FROM CTE AS C;

    Salida

    Pivot

    https://javifer2.wordpress.com/2019/10/16/pivot-simple-como-hacer-y-entenderlo-paso-por-paso/

    Union 

    https://javifer2.wordpress.com/2020/04/07/union-vs-union-all/

    jueves, 16 de julio de 2020 14:52

Todas las respuestas

  • Hola German David Quinchia Zapata:

    Puedes realizar esto utilizando un pivot, para trasponer las filas por columnas. Y luego con un union All, sumar los totales.

    set dateformat dmy;
    
    declare @VEHICULOSFECHA table
    							  (
    							  VEHICULOS    VARCHAR(6)
    							, FECHA        DATE
    							, ESTADO_VIAJE VARCHAR(20)
    							  );
    
    Insert into @VEHICULOSFECHA(VEHICULOS
    						  , FECHA
    						  , ESTADO_VIAJE)
    Values
    	   ( 'VD-212', '16/07/2020', 'CANCELADO' ),
    	   ( 'VD-212', '15/07/2020', 'TERMINADO' ),
    	   ( 'VD-212', '14/07/2020', 'CANCELADO' ),
    	   ( 'VD-217', '16/07/2020', 'TERMINADO' ),
    	   ( 'VD-217', '15/07/2020', 'TERMINADO' );
    
    With cte
    	 as (Select pvt.VEHICULOS
    			  , pvt.TERMINADO
    			  , pvt.CANCELADO
    				from (
    					   Select t.VEHICULOS
    							, t.FECHA
    							, t.ESTADO_VIAJE
    							  from @VEHICULOSFECHA AS t
    					 ) as source pivot(count(fecha) for Estado_viaje in(CANCELADO
    																	  , TERMINADO)) as pvt)
    	 select c.VEHICULOS
    		  , c.TERMINADO
    		  , c.CANCELADO
    		  , c.TERMINADO + c.CANCELADO as [Total Filas]
    			from cte AS c
    	 union all
    	 Select 'TOTAL COLUMNAS'
    		  , SUM(C.TERMINADO)
    		  , SUM(C.CANCELADO)
    		  , SUM(c.TERMINADO + c.CANCELADO)
    			FROM CTE AS C;

    Salida

    Pivot

    https://javifer2.wordpress.com/2019/10/16/pivot-simple-como-hacer-y-entenderlo-paso-por-paso/

    Union 

    https://javifer2.wordpress.com/2020/04/07/union-vs-union-all/

    jueves, 16 de julio de 2020 14:52
  • Javi, muchas gracias porque como siempre adicional a la solución, me das información muy importante.

    Que mi Dios te bendiga.


    Germanq

    jueves, 16 de julio de 2020 16:40