有两种方法可以做到这一点。第一种是旧的 pre sql-server-2008 方法是使用UNION ALL,第一个SELECT 返回表中的原始数据,第二个返回 01、02 和 Total 字段的总和:
SELECT maingroup,
subgroup,
subsubgroup,
season,
vendorid,
[01] AS '01',
[02] AS '02',
Total AS Total
FROM #aa
UNION ALL
SELECT null as maingroup,
null as subgroup,
null as subsubgroup,
null as season,
null as vendorid,
sum([01]) AS '01',
sum([02]) AS '02',
sum(Total) AS Total
FROM #aa
在 sql-server-2008 及更高版本中,您可以使用 GROUPING SETS 来代替。使用GROUPING SETS 对上述查询的等效查询是:
SELECT maingroup,
subgroup,
subsubgroup,
season,
vendorid,
sum([01]) AS '01',
sum([02]) AS '02',
sum(Total) AS Total
FROM #aa
GROUP BY GROUPING SETS((maingroup, subgroup, subsubgroup, season, vendorid), ())
两者都应该返回:
GROUPING SETS Equivalents 和 Using GROUP BY with ROLLUP, CUBE, and GROUPING SETS 是另外两个来源,提供了有关使用 GROUPING SETS 的良好信息