【问题标题】:SQL Server: ROLLUPSQL Server:汇总
【发布时间】:2013-11-01 22:38:57
【问题描述】:

在 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 

有什么想法可以得到这个输出吗?

【问题讨论】:

  • 。 .您可以发布您用来获取第一组结果的查询吗?
  • 请在“明细行上方的小计行”中明确..??
  • @GordonLinoff:我将其添加到问题中。
  • @ShivanshuSrivastava:我指的是使用ROLLUP 时出现在结果集中的小计行。我还在问题中添加了指示我所指行的文本。谢了。

标签: sql sql-server rollup


【解决方案1】:

您没有明确对结果进行排序,所以当您说 这是您通常会得到的结果...欧洲的小计行出现在欧洲的所有单独行之后您刚刚得到幸运。

尝试排序您的结果集:

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 标准的语法

...

带汇总

此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

【讨论】:

  • @AlexanderFedorenko 我以为NULL 排在最后(按升序排列)。 But I am mistakenNull 值被视为可能的最低值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 2021-06-28
  • 2015-09-28
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
相关资源
最近更新 更多