Announcement

Collapse
No announcement yet.

Datensatzausgabe aus einer Abfrage heraus begrenzen.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensatzausgabe aus einer Abfrage heraus begrenzen.

    Hallo zusammen,

    ich habe folgendes Problem bei der Abfrage aus einer MS-SQL Datenbank:

    Ich möchte die Anzahl der ausgegebenen Datensätze begrenzen. So ähnlich wie Select Top (100) Serial_No, Typ from Tabellenname.
    Nur möchte ich nicht nur die ersten z.B. 100 Datensätze der Tabelle ausgeben, sondern:
    - den 1. bis 9999. Datensatz aus der Tabelle,
    - den 10000. bis 99999. Datensatz usw.

    Leider befindet sich in der Tabelle weder eine fortlaufende Nummer, anhand der die Datensätze eingegrenzt werden können, noch irgend welche Zeitstempel. Es existiert auch kein Schlüsselfeld in der Ausgabe der Datensätze!

    Hat jemand hier eine Idee, wie ich das per T-SQL Script abfragen kann?

    Vielen Dank.
    Zuletzt editiert von HPeters; 26.07.2016, 21:55.

  • #2
    Nutze ROW_NUMBER für die Zeile

    https://msdn.microsoft.com/de-de/library/ms186734.aspx
    ->B.Zurückgeben einer Teilmenge von Zeilen
    Christian

    Comment


    • #3
      Vielen Dank für den Tip.
      Leider muss bei Verwendung von row_number ein einheitliches (Schlüsselfeld) vorhanden sein. Dem ist aber nicht so.
      Vielmehr habe ich ein Script erstellt, welches mir die notwendigen Daten liefert, die ich benötige. Aus die Sortierung ist bereits richtig. Nur ist die Ausgabe so groß, das ich diese nicht per Strg+C in die Zwischenablage hineinbekomme. Aus dem Grunde möchte ich die Ergebnisausgabe eben in mehrere Teile stückeln.
      Da die das Ergebnis Script eben kein eindeutiges Schlüsselfeld besitzt, weiß ich nun nicht, wie geht ich den row_number Befehl nun verwenden soll.

      Hat jemand eine Idee?

      Comment


      • #4
        Ergebnismenge in TEMP-Datei speichern; von dort in Häppchen in die Zwischenablage oder gleich mit der Datei arbeiten
        Christian

        Comment


        • #5
          Ich habe jetzt eine Lösung gefunden. Ob es die optimale Lösung ist, oder ob es noch bessere gibt ...???

          --Hier mein ursprüngliches Script:
          Select SN, type, ..............
          FROM Tabelle
          WHERE Bedingungen ......
          ORDER BY SN,ID

          -- Mein ursprüngliches Script habe ich um die Ausgabe der ROW_NUMBER ergänzt:
          Select ROW_NUMBER() OVER(ORDER BY SN,ID) as RowNum, SN, type, ..............
          FROM Tabelle
          WHERE Bedingungen ......

          um dieses Script habe ich noch eins gesetzt, welches mir nur die Ausgabenzeilen ausgibt die ich dessen Where Bedingung eingegeben habe.

          Meine Lösung:

          SELECT *
          FROM
          ( Select ROW_NUMBER() OVER(ORDER BY SN,ID) as RowNum, SN, type, ..............
          FROM Tabelle
          WHERE Bedingungen ...... ) AS Temp_TBL
          WHERE RowNum BETWEEN 1 AND 100000
          ORDER BY RowNum
          Zuletzt editiert von HPeters; 27.07.2016, 13:59.

          Comment

          Working...
          X