Erste Zeile in SQL Server 2005 überspringen?

Translate

Wir können auswählenTop 10oderSelect Top 'N'Zeile von SQL Server.

Aber gibt es eine Möglichkeit, die erste Zeile vom Ergebnis von oben zu überspringen?

Ich meine, ich bekomme ein Ergebnis vonselect top 5, dann überspringe ich die erste Zeile und bekomme nur die nächsten 4 Zeilen?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Sie können verwendenOVERKlausel und eine Ranking-Funktion. Sie können dies nicht direkt filtern, daher benötigen Sie eine Unterabfrage oder einen allgemeinen Tabellenausdruck. Im folgenden Beispiel wird letzterer verwendet.

DECLARE @MyTable TABLE 
(
    ID INT,
    Name VARCHAR(15)
)
INSERT INTO @MyTable VALUES (1, 'Alice')
INSERT INTO @MyTable VALUES (2, 'Bob')
INSERT INTO @MyTable VALUES (3, 'Chris')
INSERT INTO @MyTable VALUES (4, 'David')
INSERT INTO @MyTable VALUES (5, 'Edgar')

;WITH people AS 
(
    SELECT ID, Name, ROW_NUMBER() OVER (ORDER BY ID) RN
    FROM @MyTable
)
SELECT ID, Name
FROM people 
WHERE RN > 1

In der nächsten Version von SQL Server (Codename Denali) mit wird die Paginierung besser unterstütztOFFSETundFETCHSchlüsselwörter.

Quelle
Translate

Sie könnten so etwas tun:

SELECT
    *
FROM (
        SELECT      
            row_number() OVER (ORDER BY ID DESC) AS [rownum],
            *
        FROM
            tbl
) T
WHERE 
    rownum BETWEEN (2) AND (5)

Aktualisieren:

Aktualisiert, um Ihre Werte zu haben.

Update 2:

Fehler mit fehlender Unterabfrage behoben. Vielen Dank an Chris Diver, der darauf hingewiesen hat.

Quelle
Translate

Was Sie suchen, ist der Begriff Paging. So was:http://www.15seconds.com/issue/070628.htm

Quelle
Translate

Etwas wie das:

-- Test table
declare @T table(ID int)

-- Add test data
insert into @T 
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6

-- Query using row_number() over(...)
-- to get rows 2 - 5
select T.ID
from (
        select *,
               row_number() over(order by ID) as rn
        from @T       
     ) as T
where T.rn between 2 and 5
Quelle
Über den Autor