use*_*670 54 sql sql-server rollup
我知道这听起来很疯狂,可能不应该这样做,但我需要这样的东西 - 我有一个记录 SELECT [Type], [Total Sales] From Before
我想在末尾添加一个额外的行,以在表的末尾显示SUM(After).这可以吗?

And*_*y M 52
如果您使用的是SQL Server 2008或更高版本,则可以使用ROLLUP()GROUP BY功能:
SELECT
Type = ISNULL(Type, 'Total'),
TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;
Run Code Online (Sandbox Code Playgroud)
这假设Type列不能有NULL,因此此查询中的NULL将指示汇总行,即总计的行.但是,如果Type列可以具有自己的NULL,那么对于总行的更合适的会计类型将类似于@ Declan_K的答案,即使用以下GROUPING()函数:
SELECT
Type = CASE GROUPING(Type) WHEN 1 THEN 'Total' ELSE Type END,
TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;
Run Code Online (Sandbox Code Playgroud)
Aar*_*and 20
这是您希望在SQL Server 2008+中使用的更强大的分组/汇总语法.指定您正在使用的版本总是很有用,所以我们不必猜测.
SELECT
[Type] = COALESCE([Type], 'Total'),
[Total Sales] = SUM([Total Sales])
FROM dbo.Before
GROUP BY GROUPING SETS(([Type]),());
Run Code Online (Sandbox Code Playgroud)
克雷格弗里德曼写了一篇很棒的博客文章GROUPING SETS.
Rob*_*ert 15
尝试使用union all如下
SELECT [Type], [Total Sales] From Before
union all
SELECT 'Total', Sum([Total Sales]) From Before
Run Code Online (Sandbox Code Playgroud)
如果您在订购方面遇到问题,我建议尝试这样做:
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
Run Code Online (Sandbox Code Playgroud)
Dec*_*n_K 13
您可以使用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
Run Code Online (Sandbox Code Playgroud)