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

4

3 に答える 3

4

逆行トリックを使用する

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

次に(RowNum + InverseRowNum)-1=合計行

于 2012-06-12T13:03:46.190 に答える
3

count(*)over()を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
于 2012-06-12T13:02:03.130 に答える
0

結果のカウントを別のCTEとして扱い、レコードセットとともに単独で返します。完璧ではありませんが、必要なものと一致する必要があります。

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)
, total_cte as (
       select count(1) total_count from cte
)
SELECT cte.*, total_count
FROM   cte, total_cte
WHERE  RowNum BETWEEN @offset AND @offset + @limit
于 2018-10-15T06:46:23.317 に答える