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 | 5824

    Nehmen 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, id

    Das 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.


Anmelden zum Antworten