Principales respuestas
Organizar una consulta para que muestre totales por fila y por columna

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
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/
- Editado Javi Fernández F jueves, 16 de julio de 2020 14:53
- Marcado como respuesta German David Quinchia Zapata jueves, 16 de julio de 2020 16:39
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/
- Editado Javi Fernández F jueves, 16 de julio de 2020 14:53
- Marcado como respuesta German David Quinchia Zapata jueves, 16 de julio de 2020 16:39
-