total - sumar valores de una columna sql
Agregar una fila de resumen con totales (4)
Sé que esto suena loco y probablemente no debería hacerse de esta manera, pero necesito algo como esto: tengo un registro de SELECT [Type], [Total Sales] From Before
Quiero agregar una fila adicional al final para mostrar la SUMA al final de la tabla (Después). ¿Podría hacerse esto?
Esta es la sintaxis de agrupación / resumen más potente que querrá usar en SQL Server 2008+. Siempre es útil para especificar la versión que está utilizando para que no tengamos que adivinar.
SELECT
[Type] = COALESCE([Type], ''Total''),
[Total Sales] = SUM([Total Sales])
FROM dbo.Before
GROUP BY GROUPING SETS(([Type]),());
Craig Freedman escribió una excelente publicación en el blog introduciendo GROUPING SETS
.
Podrías usar el operador ROLLUP
SELECT CASE
WHEN (GROUPING([Type]) = 1) THEN ''Total''
ELSE [Type] END AS [TYPE]
,SUM([Total Sales]) as Total_Sales
From Before
GROUP BY
[Type] WITH ROLLUP
Si está en SQL Server 2008 o una versión posterior, puede usar la ROLLUP()
GRUPO POR ROLLUP()
:
SELECT
Type = ISNULL(Type, ''Total''),
TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;
Esto supone que la columna Type
no puede tener NULL y, por lo tanto, NULL en esta consulta indicaría la fila de resumen, la que tiene el total general. Sin embargo, si la columna Type
puede tener NULL propios, el tipo de contabilidad más apropiado para la fila total sería como en la respuesta de @Declan_K, es decir, utilizando la función GROUPING()
:
SELECT
Type = CASE GROUPING(Type) WHEN 1 THEN ''Total'' ELSE Type END,
TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;
Trate de usar la union all
como sigue
SELECT [Type], [Total Sales] From Before
union all
SELECT ''Total'', Sum([Total Sales]) From Before
Si tiene problemas con el pedido, como i-one sugirió, intente esto:
select [Type], [Total Sales]
from (SELECT [Type], [Total Sales], 0 [Key]
From Before
union all
SELECT ''Total'', Sum([Total Sales]), 1 From Before) sq
order by [Key], Type