我正在将 SQL SERVER 2005 迁移到 SQL SERVER 2014 并遇到了这个问题。我有一个“搜索引擎” STORED PROCEDURE
,可以为我的报告网站即时构建报告查询。在旧版本中,我曾经COMPUTE BY
获得小计和总计。COMPUTE BY
SQL SERVER 2014 不再支持,我切换到使用GROUPING SETS
. 但是,有一个问题。报告可以有多个页面。他们可以有超过 200 页。我只想在最后一页显示总计。默认情况下,每页都获取 1000 条记录。最后一页通常会显示剩余记录和整个记录集的总计。我可以用COMPUTE BY
. 和GROUPING SETS
, 我不能。我只能计算最后一页的总计,而不是整个记录集。任何建议,将不胜感激。谢谢。
问问题
701 次
1 回答
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
计算整个数据集,而不仅仅是页面。
于 2016-02-16T17:20:17.990 回答