MS SQL + Durch bestimmte Anzahl Datensätze schalten
-
Hi@all,
ich habe da folgende Aufgabenstellung.
Ich habe in einer Tabelle Spalten, mit Werten, die mehrfach vorkommen können z.B. die Spalte Land in der gibt es z.B. 100 mal Einträge mit dem Wert Deutschland.
Nun soll es möglich sein der Reihenfolge nach immer 25 Datensätze anzuzeigen, sprich wenn ich auf Weiter klicke möchte ich die nächsten 25 Datensätze ausgehend vom letzten Datensatz vom vorhergenden Ergebnis zurückbekommen.
Besonderheiten sind, das die Spalten auf- bzw absteigend sortiert sein können und man halt vorwärts wie rückwärts schalten kann. Es gibt keinen auto_inc Index sondern Index ist eine Selbsterstellte ID als String. Wie in diesem Beispiel liegt die Sortierung(Order by) auf Land, sprich die Sortierung kann auch auf anderen Feldern liegen.Wie kann man das mit MS SQL lösen?
Für eure Mühen schon mal besten Dank im voraus.Gruß
CrazyPlaya
-
Bsp:
land | id
----------------------------
Deutschland | 12fa
Deutschland | e4a
Deutschland | 1350
Deutschland | 12af
Deutschland | e34
Deutschland | 4ef
Deutschland | 154f
Deutschland | aa3
Deutschland | 852
Deutschland | efa
Deutschland | 490b
Deutschland | 583c
Deutschland | 5824Nehmen wir hier mal das Beispiel Top 6 um es kürzer zu halten.
Als erstes werden die Datensätze von '12fa' - '4ef' angezeigt.
Weiter Schalten = +6 ab '154f'
Richtig aussehen würde die id allerdings so ->'{3e8-3e8-12fa}' inkl. der Spitzklammern
-
Du musst ein SUBSELECT machen.
MS SQL kennt kein LIMIT X,Y wie z.B. MySQL. MS SQL kennt nur TOP und liefert eben die ersten X einträge.SELECT TOP 10; Ersten 10
SELECT TOP 10 (SELECT TOP 20 ORDER BY ) Die ersten 20 umgekeht sortieren und dann die TOP 10 daraus anzeigen liefert von 11 - 20 u.s.w.
Will man z.B. 100000 - 100010 haben wird es mühsam.
Verstehe sowieso nicht wieso MS sowas nicht drin hat auch wenn es nicht SQL-Standard ist.
-
Das hatte ich schon probiert ist für meine zwecke nicht wirklich brauchbar.
Habe es nun so gelöst.select Top x from tab where land >= 'land' AND id > 'id' or
land > 'land'
order by land, idDas funktioniert so genauso wie ich es möchte.
zurückschalten war etwas schwieriger.
Man brauch erstmal die rückwärtigen 10 DS absteigend und
dann muss mit dem letzten wert aus dder abfrage wieder die selbe
Abfrage wie oben ausgeführt werden.
-
Schau dir mal Cursor an. Damit kannst du im Resultset vor- und zurückscrollen.