我正在将SQL SERVER 2005迁移到SQL SERVER 2014并遇到了这个问题。我有一个“搜索引擎”STORED PROCEDURE
可以为我的报告网站动态构建报告查询。在旧版本中,我使用COMPUTE BY
来获得小计和总计。 SQL SERVER 2014不再支持COMPUTE BY
,我转而使用GROUPING SETS
。但是,有一个问题。报告可以有多个页面。他们可以有200页。我只想在最后一页上显示总计。默认情况下,页面正在获取1000条记录。最后一页通常会显示剩余记录和整个记录集的总计。我可以用COMPUTE BY
实现这一点。使用GROUPING SETS
,我不能。我只能计算最后一页的总计,而不是整个记录集。任何建议,将不胜感激。谢谢。
答案 0 :(得分:2)
您应该可以使用WITH ROLLUP
并使用OFFSET
/ FETCH
分页;
CREATE TABLE test (id INT, val INT);
INSERT INTO test VALUES (1,1),(1,2),(1,3),(1,4),(2,1),(2,2),(2,3),(2,4),(2,5);
INSERT INTO test VALUES (3,1),(3,2),(3,3),(3,4),(4,1),(4,2),(4,3),(4,4),(4,5);
整个结果;
SELECT id, SUM(val) val FROM test GROUP BY id WITH ROLLUP
ORDER BY CASE WHEN id IS NULL THEN 1 END, id
id val
1 10
2 15
3 10
4 15
null 50 -- Total sum rollup
...和页面大小3的最后一页;
SELECT id, SUM(val) val FROM test GROUP BY id WITH ROLLUP
ORDER BY CASE WHEN id IS NULL THEN 1 END, id
OFFSET 3 ROWS -- skip 3 rows
FETCH NEXT 5 ROWS ONLY; -- take 3 rows
id val
4 15
null 50 -- Total sum rollup
如您所见,WITH ROLLUP
+ OFFSET
/ FETCH
计算整个数据集,而不仅仅是页面。