如何为SQL Server 2014查询结果添加Grand Total总计列?
实现每行显示总计列的几种方法
嘿,这个需求很容易搞定,在SQL Server 2014里有几种实用的方法可以实现你要的效果,我给你列两个最常用的:
方法1:使用窗口函数(最简洁)
窗口函数SUM() OVER()可以直接计算整个结果集的总和,并且把这个值附加到每一行,完全不需要额外的关联操作,代码如下:
USE MyDatabase; SELECT Market, SUM([RN]) AS [RN], SUM(SUM([RN])) OVER() AS [Grand Total] -- 嵌套SUM是因为外层是聚合后的分组结果 FROM [View1] GROUP BY Market;
解释一下:外层的SUM([RN])是按Market分组后的小计,SUM(SUM([RN])) OVER()则是把所有分组的小计再求和,得到全局总计,并且每行都会显示这个值。
方法2:使用子查询+交叉关联
如果你更习惯用传统的关联方式,也可以先单独计算出总计,再通过CROSS JOIN把总计和原查询的结果关联起来,代码如下:
USE MyDatabase; WITH MarketTotals AS ( SELECT Market, SUM([RN]) AS [RN] FROM [View1] GROUP BY Market ), GrandTotal AS ( SELECT SUM([RN]) AS [Grand Total] FROM MarketTotals ) SELECT mt.Market, mt.[RN], gt.[Grand Total] FROM MarketTotals mt CROSS JOIN GrandTotal gt;
这种方法先通过CTE计算出每个Market的小计,再单独计算全局总计,最后把两个结果集交叉连接,让每行都带上总计值。
这两种方法都能得到你想要的结果:
| Market | RN | Grand Total |
|---|---|---|
| UK | 100 | 525 |
| FRANCE | 125 | 525 |
| GERMANY | 300 | 525 |
内容的提问来源于stack exchange,提问作者user3115933
相关产品推荐
相关产品推荐

