在SQL Server中使用ROLLUP
时,如何获取详细行上方的小计行?
这是您在使用ROLLUP
时通常会得到的结果:
Group Name Total Sales
---------------- --------------- ------------
Europe France 74569.00
Europe Germany 59456.00
Europe United Kingdom 78327.00
Europe NULL 212352.00 << sub total row for Europe appears **after** all the individual rows for Europe.
North America Northwest 208774.00
North America Southeast 145477.00
North America Southwest 164232.00
North America NULL 518483.00
Pacific Australia 93403.00
Pacific NULL 93403.00
这是预期的结果集:
Group Name Total Sales
---------------- --------------- ------------
Europe NULL 212352.00 << sub total row for Europe needs to appear **before** the individual rows for Europe.
Europe France 74569.00
Europe Germany 59456.00
Europe United Kingdom 78327.00
North America NULL 518483.00
North America Northwest 208774.00
North America Southeast 145477.00
North America Southwest 164232.00
Pacific NULL 93403.00
Pacific Australia 93403.00
使用的查询:
SELECT [Group], [Name], SUM([SalesYTD]) AS 'Total Sales'
FROM #TempTable
GROUP BY [Group], [Name] WITH ROLLUP
我们如何获得此输出的任何想法?
答案 0 :(得分:6)
您没有明确地对结果进行排序,所以当您说这是您通常会得到的...欧洲的所有单独行之后出现欧洲的子总行您刚刚获得幸运的。
尝试订购结果集:
SELECT [Group], [Name], SUM([SalesYTD]) AS 'Total Sales'
FROM #TempTable
GROUP BY [Group], [Name] WITH ROLLUP
ORDER BY [Group], [Name]
虽然也尝试not using WITH ROLLUP
as well:
非ISO合规语法
...
WITH ROLLUP
此功能将在Microsoft SQL Server的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。