2012-03-26 8 views
0

Gibt es eine Möglichkeit, eine Seitennummer (in einer Seitenliste) zu bestimmen, die eine Zeile mit der angegebenen ID enthält?Seitennummer nach Zeilen-ID in der Seitenliste suchen

+0

Wir brauchen viel mehr Informationen, um zu versuchen, dies zu beantworten. Was genau willst du? – Lamak

+0

Paged Liste bedeutet, dass ich Informationen teilweise mit SKIP und TAKE-Anweisungen abrufen. Zum Beispiel habe ich 100 Zeilen in 10 Seiten unterteilt. Also wenn ich die zweite Seite bekommen möchte, schreibe ich: SELECT * FROM Zeilen SKIP ((PageNumber - 1) * 10) TAKE (10); // wo PageNumber 2 ist. Jetzt möchte ich herausfinden, was Seitenzahl für Zeile mit ID 55 ist. – cryss

+0

T-sql hat keine SKIP oder TAKE. –

Antwort

0

So etwas würde in T-SQL arbeiten, wenn Sie die ORDER BY stellen Sie sicher, ist genau für was Sie das Sortieren von:

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