2012-06-12 71 views
1

總行我有一個SQLServer SELECT計數查詢

DECLARE @offset INT; 
DECLARE @limit INT; 

WITH cte 
    AS (SELECT t.*, 
       Row_number() OVER (ORDER BY Id) AS RowNum 
     FROM (SELECT * 
       FROM Table1 
       UNION 
       SELECT * 
       FROM Table2) t) 
SELECT * 
FROM cte 
WHERE RowNum BETWEEN @offset AND @offset + @limit 

我怎麼能知道WHERE條件RowNum BETWEEN @offset AND @offset + @limit

回答

3

您可以添加COUNT(*)在()總行的限制,但無CTE :

WITH cte 
    AS (SELECT t.*, 
       Row_number() OVER (ORDER BY Id) AS RowNum, 
       count(*) over() as Cnt 
     FROM (SELECT * 
       FROM Table1 
       UNION 
       SELECT * 
       FROM Table2) t) 
SELECT * 
FROM cte 
WHERE RowNum BETWEEN @offset AND @offset + @limit 
+0

不知道這個謝謝。 –

4

使用逆行招

Row_number() OVER (ORDER BY Id asc) AS RowNum, 
Row_number() OVER (ORDER BY Id desc) AS InverseRowNum, 

then(RowNum + InverseRowNum) - 1 =總行數