我使用的是 Microsoft SQL 2012
我正在使用 OFFSET 和 FETCH NEXT 在查询中进行分页。我确实需要总体计数,所以我使用 OVER() 来获取总体计数。我遇到的问题是,当我的一个查询中有 UNION 时,OVER() 将返回 UNION 该部分的总计。
示例:
SELECT something
,overall_count = COUNT(*) OVER()
FROM tbl_something
WHERE something = @someparameter
UNION
SELECT something
,overall_count = COUNT(*) OVER()
FROM tbl_something
WHERE something = @someOtherParameter
OFFSET (@intPage - 1) * 50 ROWS
FETCH NEXT 50 ROWS ONLY
在上面的示例中,如果查询中每个 SELECT 语句有 10 个结果,则每个记录的overall_count 将返回 10。但我需要统计所有记录的数量。
最佳答案
只需合并 2 个查询即可获取计数和偏移量
SELECT *,
overall_count = COUNT(*) OVER()
FROM (
SELECT something
FROM tbl_something
WHERE something = @someparameter
UNION
SELECT something
FROM tbl_something
WHERE something = @someOtherParameter
) u
ORDER BY something
OFFSET (@intPage - 1) * 50 ROWS
FETCH NEXT 50 ROWS ONLY
或者如果更有意义,您可以使用 cte
;WITH cte AS (
SELECT something
FROM tbl_something
WHERE something = @someparameter
UNION
SELECT something
FROM tbl_something
WHERE something = @someOtherParameter
)
SELECT *,
overall_count = COUNT(*) OVER()
FROM cte
ORDER BY something
OFFSET (@intPage - 1) * 50 ROWS
FETCH NEXT 50 ROWS ONLY
关于sql - 在具有 UNION 的查询中使用 OVER(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31571083/