DECLARE @OrdersTemp TABLE
(
OrderId UNIQUEIDENTIFIER
)
INSERT INTO @OrdersTemp
SELECT ord.Id
FROM Orders
--all rows count
SELECT
@RowsCount = COUNT(DISTINCT ord.Id)
FROM Orders
--@RowsCount = 5. It's right!
--second table with paging
DECLARE @OrdersTempWithPaging TABLE
(
OrderId UNIQUEIDENTIFIER
)
INSERT INTO @OrdersTempWithPaging
SELECT OrderId
FROM (SELECT DISTINCT OrderId,
ROW_NUMBER() OVER (ORDER BY OrderId) AS RowNum
FROM @OrdersTemp) AS alias
WHERE
RowNum BETWEEN (@PageIndex - 1) * @PageSize + 1
AND @PageIndex * @PageSize
SELECT * FROM @OrdersTempWithPaging
--10 or more rows. It's wrong.
Why does @OrdersTempWithPaging return wrong amount of rows? How do I avoid it?
UPDATE:
The statement below returns 25 = 5*5 rows (instead of 5)
INSERT INTO @OrdersTempWithPaging
SELECT OrderId
FROM (
SELECT OrderId,
ROW_NUMBER() OVER (ORDER BY OrderId ) AS RowNum
FROM @OrdersTemp ) AS alias
--WHERE RowNum BETWEEN ( @PageIndex - 1 ) * @PageSize + 1
-- AND @PageIndex * @PageSize
SELECT * FROM @OrdersTempWithPaging
Try this (reversing the
DISTINCTuse):If you need only distinct order-ids, you could have:
and then: