When querying a table in sql server, im trying to fetch only the current page of records. However I need the total number of records that would be returned for the particular query to calculate the number of pages. How to do this efficiently without writing another query to count the records.
WITH allentities
AS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS
rowid
,empid
,lastname
,firstname
,d.depname
FROM emp e join dep d on e.depid=d.depid)
SELECT *
FROM allentities
WHERE rowid >= @pageid
AND rowid <= @pageid + 20
If you add a second ROW_NUMBER()
sorting DESC
rather than ASC
, you can calculate the total number of records by adding the two rowcounts together and subtracting one. Any row in the rsult set will have the correct total number of rows:
WITH allentities
AS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS
rowid
,empid
,lastname
,firstname
,d.depname
,ROW_NUMBER() OVER (ORDER BY se.entityid DESC) AS rowIdNeg
FROM emp e join dep d on e.depid=d.depid)
SELECT *
,rowid + rowIdNeg - 1 as totalRecords
FROM allentities
WHERE rowid >= @pageid
AND rowid <= @pageid + 20
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With