Frage von f5f5f5, 218

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

Ich habe eine Tabelle die hat die Felder Name, Sortierreihenfolge. Also nur zwei Felder. Jetzt möchte ich gerne Nachnamen sortieren und in die Sortierreihenfolge eine 1,2, 3,4 schreiben. Hat jemand eine Idee wie die Update Funktion aussehen müsste?

Antwort
von MschesByte, 144

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

Kommentar von f5f5f5 ,

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

Antwort
von Tschoo, 109

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ß

Kommentar von f5f5f5 ,

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?

Kommentar von Tschoo ,

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ß

Antwort
von Sawascwoolf, 104

Diese Nummerierung hat nichts in der Datenbank zu suchen.

Zumindest so lange du nicht eine benutzerdefinierte Reihenfolge verwenden willst.

SQL kann gut Strings sortieren.

Kommentar von f5f5f5 ,

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

Keine passende Antwort gefunden?

Fragen Sie die Community