Benutzer mit den meisten Antworten
Zeilennumer in ein Feld schreiben

Frage
-
Hallo
Ich habe eine Anfängerfrage. Mit rank() kann eine Tabelle durchnummeriert werden.
Nun habe ich eine bestehende Tabelle mit mehreren Verkäufern. Eine Spalte nennt sich Verkäufernummer. Nun möchte ich in dieser Spalte jeweils die entsprechende Zeilennummer einfügen.
Bsp.
Verkäufer Verkäufernr.
aldi 1
lidl 2
coop 3Die werte müssen nicht sortiert werden, ich brauche lediglich eine fortlaufende Nummer in einer bestehenden Spalte.
Wie mache ich einen solchen Eintrag am einfachsten per SQL?
Danke und Gruss
Wili
Antworten
-
Hallo Wili, für mein kleines Beispiel habe ich mal Row_Number bemüht:
Declare @test table(Verkaeufer varchar(10), Nr integer); Insert into @test(Verkaeufer) values ('abc'); Insert into @test(Verkaeufer) values ('abd'); Insert into @test(Verkaeufer) values ('cde'); update @test set Nr = x.rrn from @test t inner join (Select Verkaeufer, Row_number() over(order by Verkaeufer) as rrn from @test) x on t.Verkaeufer = x.Verkaeufer; Select * from @test order by Verkaeufer ;
Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu- Als Antwort vorgeschlagen KostjaMVP Montag, 11. Juli 2011 12:33
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 4. August 2011 12:59
-
Z.B. mit einer Common Table Expression:
DECLARE @Sample TABLE ( Employee VARCHAR(32) , NoEmployee INT ) ; INSERT INTO @Sample VALUES ( 'aldi', 0 ), ( 'lidl', 0 ), ( 'coop', 0 ) ; WITH CTE AS ( SELECT * , ROW_NUMBER() OVER ( ORDER BY Employee ) AS RN FROM @Sample ) UPDATE C SET NoEmployee = RN FROM @Sample S INNER JOIN CTE C ON S.Employee = C.Employee ; SELECT * FROM @Sample ;
Wobei dein Sortierkriterium und Join-Bedingung ein Kandiatenschlüssel sein sollten.
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann- Bearbeitet Stefan HoffmannModerator Montag, 27. Juni 2011 10:38 broken link
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 4. August 2011 13:06
Alle Antworten
-
Z.B. mit einer Common Table Expression:
DECLARE @Sample TABLE ( Employee VARCHAR(32) , NoEmployee INT ) ; INSERT INTO @Sample VALUES ( 'aldi', 0 ), ( 'lidl', 0 ), ( 'coop', 0 ) ; WITH CTE AS ( SELECT * , ROW_NUMBER() OVER ( ORDER BY Employee ) AS RN FROM @Sample ) UPDATE C SET NoEmployee = RN FROM @Sample S INNER JOIN CTE C ON S.Employee = C.Employee ; SELECT * FROM @Sample ;
Wobei dein Sortierkriterium und Join-Bedingung ein Kandiatenschlüssel sein sollten.
Microsoft MVP Office Access
https://mvp.support.microsoft.com/profile/Stefan.Hoffmann- Bearbeitet Stefan HoffmannModerator Montag, 27. Juni 2011 10:38 broken link
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 4. August 2011 13:06
-
Hallo Wili, für mein kleines Beispiel habe ich mal Row_Number bemüht:
Declare @test table(Verkaeufer varchar(10), Nr integer); Insert into @test(Verkaeufer) values ('abc'); Insert into @test(Verkaeufer) values ('abd'); Insert into @test(Verkaeufer) values ('cde'); update @test set Nr = x.rrn from @test t inner join (Select Verkaeufer, Row_number() over(order by Verkaeufer) as rrn from @test) x on t.Verkaeufer = x.Verkaeufer; Select * from @test order by Verkaeufer ;
Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu- Als Antwort vorgeschlagen KostjaMVP Montag, 11. Juli 2011 12:33
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 4. August 2011 12:59
-
Vielen Dank für die prompten Antworten
Noch als Ergänzug. Die bestehende Tabelle hat über 3000 Zeilen und ich möchte den Befehl gleich im Microsoft SQL Server Studio ausführen.
Das heisst ich kann gleich auf die bestehende Tabell zugreifen, z.b.:
update
[mydb].[dbo].[Vendor]
set
Nr = x.rrn
from
[myDB]
.[dbo].[Vendor] vinner
join
(
Select [part number], Row_number() over(order by [part number]) as rrn
from
[myDB].[dbo].[Vendor]) x
on
v.[vendornumber] = x.[part number]
;
Jedoch läuft der zweite Vorschlag nicht durch, ich habe Probleme mit dem set Nr=x.rrn. Ich erhalte jeweils folgende Fehlermeldung:
Msg 207, Level 16, State 1, Line 3
Invalid column name 'Nr'.Was mache ich falsch?
Danke und Gruss
-
Das Nr. Problem habe ich gelöst.
Wenn ich im mircosoft SQL Server diese Abfrage nu ausführe, dann heisst es jeweils "0 row affected".
Das heisst es wurde keine Änderung durchgeführt. Kann man nicht gleich eine Query im Microsoft SQL Server Managemant Studio ausführen, welche gleich die Werte in einer bestehenden Tabelle ändert?
In einer Excel Tabelle würde man einfach in einer Spalte die ersten paar Zeilen mit Nummern füllen und anschliessen kann diese fortlaufende Nummerierung für die ganze Spalte erweitert werden.
Gibt es keine Funktion, die das auch bei SQL Tabellen anwendet?
-
Entweder heißt die Spalte anders, oder der eigentliche Fehler liegt in der falschen Schreibweise von ORDER BY (orderby)! ? !
Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu -
Meinst Du so etwas wie IDENTITY?
Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org/blogs/cmu