Wie kann ich in einem SQL eine fortlaufende Nummerierung in schreiben?

... komplette Frage anzeigen

3 Antworten

Hallo,

das Ganze ist nicht ganz so einfach, da du erst die jeweilige Nummer ermitteln musst und danach erst die Werte setzen kannst.

Ich würde folgendes Skript ausführen(Für MS SQL 2014 geschrieben):

DECLARE iter CURSOR FOR
SELECT Name AS Name,
ROW_NUMBER() OVER (ORDER BY Name) AS nr
FROM Test --Anpassen
ORDER BY Name

DECLARE @name varchar(50);--Anpassen
DECLARE @nr int;

OPEN iter;

FETCH NEXT FROM iter INTO @name, @nr;

while @@FETCH_STATUS = 0 begin
UPDATE Test --Anpassen
SET Sortierreihenfolge = @nr
WHERE Name = @name;

FETCH NEXT FROM iter INTO @name, @nr;
end;

CLOSE iter;
DEALLOCATE iter;

Du musst nur noch den Tabellenname(hier Test) und den Typ von deinem Feld Name anpassen(hier varchar(50) ).

Folgendes passiert:

Zuerst brauchen wir eine SELECT Anweisung, die dein Ergebnis darstellt:

SELECT Name AS Name, 
ROW_NUMBER() OVER (ORDER BY Name) AS nr
FROM Test --Anpassen
ORDER BY Name

Dieses geben wir einem CURSOR, damit wir Zeile für Zeile durchgehen können. Um die Werte auch wirklich zu haben, brauchen wir auch noch zwei Variablen vom gleichen Typ, also @name und @ nr. Nun wird der CURSOR geöffnet und damit die SELECT-Anweisung ausgeführt.

In der while-Schleife aktualisieren wir jeden Eintrag in der echten Tabelle mit der aktuellen Nummer. Dazu stecken wir die Werte einer Zeile in die Variablen und erstellen mit diesen ein UPDATE.

Am Schluss müssen wir den CURSOR schließen und freigeben, da wir ihn nicht speicher wollen.

Mit freundlichen Grüßen

  Msches Byte

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von f5f5f5
13.02.2016, 11:36

Danke das war jetzt eine Menge. Das muss ich mir erst mal nächste Woche in Ruhe durchlesen.

0

Hallo, wenn du die sortierte List aus der Datenbank holst, einfach jedem Listenelement deine laufende Nummer geben und jeweils um eins erhöhen lfdnr = lfdnr + 1

Wenn du das in der Datenbank haben willst, musst du erst noch eine Spalte für "laufende Nummer" in die Tabelle bringen.

Gruß

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von f5f5f5
05.02.2016, 07:30

Das fällt laufende Nummer ist mein Sortierfeld. Gibt es also schon und möchte ich überschreiben.

Und wie soll der SQL Syntax dazu aussehen?

0

Diese Nummerierung hat nichts in der Datenbank zu suchen.

Zumindest so lange du nicht eine benutzerdefinierte Reihenfolge verwenden willst.

SQL kann gut Strings sortieren.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von f5f5f5
05.02.2016, 00:28

Die Applikation sortiert aber nun mal nach diesem Sortierfeld. Und ich möchte das jetzt nicht manuell machen, sondern mit einem SQL.

0

Was möchtest Du wissen?