2012-03-26 4 views
0

주어진 ID를 가진 행을 포함하는 페이지 번호 (페이지 목록에서)를 확인하는 방법이 있습니까? 당신이 ORDER BY는별로 정렬하는지에 대한 정확한 확인하면이 같은페이지 번호를 페이지 목록에서 찾으십시오.

+0

우리는이 대답을 시도하는 훨씬 더 많은 정보를 필요로한다. 정확히 무엇을 원하니? – Lamak

+0

페이징 된 목록은 SKIP 및 TAKE 문을 사용하여 부분적으로 정보를 검색한다는 것을 의미합니다. 예를 들어, 10 개의 페이지로 나뉘어 진 100 개의 행이 있습니다. 따라서 두 번째 페이지를 가져 오려면 다음과 같이 작성하십시오. SELECT * FROM rows SKIP ((PageNumber - 1) * 10) TAKE (10); // 여기서 PageNumber는 2입니다. 이제 ID가 55 인 행에 대해 페이지 번호가 무엇인지 알아야합니다. – cryss

+0

T-SQL에는 SKIP 또는 TAKE이 없습니다. –

답변

0

뭔가 T-SQL에서 작동합니다 :

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 
0
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 
관련 문제