Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在具有并集的查询中使用OVER()_Sql_Sql Server - Fatal编程技术网

Sql 在具有并集的查询中使用OVER()

Sql 在具有并集的查询中使用OVER(),sql,sql-server,Sql,Sql Server,我正在使用Microsoft SQL 2012 我在查询中使用OFFSET和fetchnext进行分页。我确实需要总计数,但我使用OVER()来获取总计数。我遇到的问题是,当我在一个查询中有一个并集时,OVER()将返回该部分并集的总数 例如: SELECT something ,overall_count = COUNT(*) OVER() FROM tbl_something WHERE something = @someparameter UNION SELECT some

我正在使用Microsoft SQL 2012

我在查询中使用OFFSET和fetchnext进行分页。我确实需要总计数,但我使用OVER()来获取总计数。我遇到的问题是,当我在一个查询中有一个并集时,OVER()将返回该部分并集的总数

例如:

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个结果,则每个记录的总计数将返回为10。但我需要清点所有的记录

您是否尝试过在您的工会周围附加Select语句?就像下面

SELECT * FROM (
   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
) a

ORDER BY something
OFFSET (@intPage - 1) * 50 ROWS
FETCH NEXT 50 ROWS ONLY

只需要组合这两个查询,然后得到您的计数和偏移量

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

我有,但似乎没有帮助。。。除非我做错了什么,否则需要一个
orderby
子句。您是否在
OFFSET
子句之前包含了一个?@jradich1234您仍然无法获得每行所有记录的总数。我不知道需要ORDER BY。我没有将它们包括在我的示例中,因为我不知道它们是相关的,但它存在于我的查询中
SELECT something
      ,overall_count = COUNT(*) OVER()
FROM tbl_something
WHERE something in (@someparameter, someOtherParameter) 
order by something 
OFFSET (@intPage - 1) * 50 ROWS
FETCH NEXT 50 ROWS ONLY