0

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

4

1 回答 1

2

您应该能够使用/WITH ROLLUP进行分页;OFFSETFETCH

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 回答