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

3 Antworten

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ß


f5f5f5 
Beitragsersteller
 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?

verreisterNutzer  06.02.2016, 19:00
@f5f5f5

Mal langsam, du hast gesagt deine Tabelle hat nur zwei Spalten, eine davon ist "Sortierreihenfolge", was steht denn in diesem Feld, das was ich unter lfdnr verstehe?

Was ist dann dein Problem -- oder kannst du kein SQL?

"Update tabelenname set sortierreihenfolge = lfdnr where nachname = 'name'"

wäre eine Möglichkeit, es kommt aber auf dein Programm an, dass diese Tabelle nutzt (und eine neue Sortierung vornimmt).

Gruß

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


f5f5f5 
Beitragsersteller
 13.02.2016, 11:36

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

Diese Nummerierung hat nichts in der Datenbank zu suchen.

Zumindest so lange du nicht eine benutzerdefinierte Reihenfolge verwenden willst.

SQL kann gut Strings sortieren.


f5f5f5 
Beitragsersteller
 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.