[SQL Server 2000] - nten Beitrag einer SQL Tabelle selektieren

Sinc

Mitglied
Hey Lads,

Ich habe eine KnowledgeDB in der bekannte Fehler gespeichert werden.
Falls ich nach einem Fehler suche, bekomme ich teilweise recht viele Beitraege zurueck.
Ich moechte nun gerne meine Suchergebnisse unterteilen, so wie das z.B. bei der Google Suche zu sehen ist.
D.h. es sollen jeweils nur 10 Beitraege pro Seite aufgelistet werden.

Momentan kann ich mir jeweils x Beitraege anzeigen lassen mit Start- und Endwert.
Code:
SELECT     ID, subject, error
FROM         dbo.errsolution
WHERE     ((SELECT     COUNT(*)
                         FROM         dbo.errsolution n2
                         WHERE     n2.ID <= dbo.errsolution.ID) BETWEEN 1 AND 10)
ID = Primary key

Soweit, so gut.
Aber wie verkaufe ich dem jetzt, dass er doch bitte die ersten 10 Beitraege oder alle Beitraege vom 11ten bis zum 20ten anzeigt, die ein bestimmtes Wort enthalten? z.B.
Code:
WHERE dbo.errsolution.error LIKE '%root%'


SQL Server 2000 sind Befehle wie LIMIT, OFFSET oder ROW_COUNT leider noch nicht bekannt.


Koennt ihr mir weiterhelfen?
 
Vielen Dank, das sieht vielversprechend aus.
Muss ich wohl nochmal google benutzen ueben gehen :rolleyes:

Ich kann leider erst spaeter genauer reingucken.
Aber ich werde das Topic auf jeden Fall updaten.
 
Vielen Dank. Die zweite Antwort in http://stackoverflow.com/questions/503566/efficient-paging-limit-query-in-sqlserver-2000 löst das Problem.
Ich weiss nicht wie sich der geschachtelte Select Befehl auf grössere Datensätze auswirkt, für meine DB funktioniert er ohne merkbare Performanceeinbußen.

I think a nested SELECT TOP n query is probably the most efficient way to accomplish it.

Code:
SELECT TOP ThisPageRecordCount *
FROM Table
WHERE ID NOT IN (SELECT TOP BeforeThisPageRecordCount ID FROM Table ORDER BY OrderingColumn)
ORDER BY OrderingColumn

Replace ThisPageRecordCount with items per page and BeforeThisPageRecordCount with (PageNumber - 1) * items-per-page.

Of course the better way in SQL Server 2005 is to use the ROW_NUMBER() function in a CTE.
 

Neue Beiträge

Zurück