Найти номер страницы по идентификатору строки в выгружаемом списке - PullRequest
0 голосов
/ 27 марта 2012

Есть ли способ определения нумерации страницы (в листе с постраничной рассылкой), содержащей строку с заданным идентификатором?

Ответы [ 2 ]

0 голосов
/ 27 марта 2012
declare @Foo as table ( FooId int identity, Bar varchar(16) )
insert into @Foo ( Bar ) values ( 'this' ), ( 'is' ), ( 'some' ), ( 'sample' ), ( 'data' ), ( 'eh?' )

declare @PageSize int = 3

-- Display the page numbers.  Note that there must be an explicit order.
select FooId, Bar, ( RN + @PageSize - 1 ) / @PageSize as Page
  from (
  select FooId, Bar, Row_Number() over ( order by Bar ) as RN
    from @Foo
    ) as Janet

-- Retrieve a single page number based on a   FooId .
select FooId, Bar, ( RN + @PageSize - 1 ) / @PageSize as Page
  from (
  select FooId, Bar, Row_Number() over ( order by Bar ) as RN
    from @Foo
    ) as Janet
  where FooId = 3
0 голосов
/ 27 марта 2012

Примерно так будет работать в T-SQL, если вы убедитесь, что ORDER BY является точным для того, что вы сортируете:

DECLARE @RowId INT = 55
    , @PageSize INT = 10;

DECLARE @Data TABLE
(
    Id INT IDENTITY(1,1)
    , Value INT
)

INSERT @Data
SELECT
    CAST(V.number AS INT)
FROM master..spt_values V
WHERE V.[type] = 'P'
    AND CAST(V.number AS INT) BETWEEN 1 AND 100

;WITH RankedData AS
(
    SELECT
        ROW_NUMBER() OVER(ORDER BY D.Value) AS Row
        , D.Id
    FROM
        @Data D
)
SELECT 
    (SELECT Row FROM RankedData WHERE Id = @RowId) / @PageSize
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...