In Tabelle laufende Nummer vergeben

LT-Man

Neuer Benutzer
Beiträge
4
Hallo Gemeinde,

ich würde gerne in einer vorhandenen Tabelle mit ca. 1000 Personen allen Personen eine AdressID hinzufügen. Das soll eine fortlaufende Nummer sein, die dann für die jeweils gleiche Adresse auch bei untrerschiedlicher Anzahl Personen gleich ist und von 1 hochgezählt wird.
Das Ziel ist also jeder Adresse eine ID.
Mir fehlt leider eine Idee wie das als Script machbar ist, notfalls mache ich es über ein Programm.
Vielleicht hat aber hier jemand eine Idee.

Danke schon mal und Gruß
 
Werbung:
Bei MSSQL würde ich das ganze am besten ohne Schleife lösen:
Code:
WITH t AS(
   SELECT   ROW_NUMBER() OVER (PARTITION BY Adressefelder ORDER BY PersonenID) AS AdressID,
       PersonenID
   FROM   tabelle
   )
UPDATE   tabelle
SET     tabelle.AdressID = t.AdressID
FROM   tabelle
INNER JOIN t
ON     tabelle.PersonenID = t.PersonenID
Voraussetzung ist natürlich eine entsprechende neue Spalte AdressID, eine vorhandene PersonenID und Adressfelder muss vermutlich mit Straße, Ort und PLZ ersetzt werden.
 
Danke schon mal für die Antwort, ich mache wohl bei der Anpassung etwas falsch.
Meine Felder heißen ID,Name,Vorname,Strasse und das Feld das befüllt werden soll GroupNo.
So sieht es jetzt aus:

WITH t AS(
SELECT ROW_NUMBER() OVER (PARTITION BY ID,name,vorname,strasse ORDER BY ID) AS AdressID,
ID
FROM Adr
)
UPDATE Adr
SET adr.GroupNo = t.AdressID
FROM Adr
INNER JOIN t
ON adr.ID = t.ID

AS AdressID,PersonenID habe ich durch AS AdressID,ID ersetzt da PersonenID Ungültiger Spaltenname 'PersonenID' brachte.
Das Ergebnis ist in jeder Zeile von GroupNo = 1
 
Code:
WITH t AS(
   SELECT   ROW_NUMBER() OVER (PARTITION BY strasse ORDER BY ID) AS GroupNo,ID
   FROM   Adr
   )
UPDATE   Adr
SET     Adr.GroupNo = t.GroupNo
FROM   Adr
INNER JOIN t
ON     Adr.ID = t.ID
Wobei strasse normalerweise ja nicht zwangsläufig die selbe "Adresse" ist. Das wirst du aber besser wissen.
 
Habe das Script laufen lassen und komme auf 51 als höchste Groupno. Die normale Dubletten-Abfrage liefert aber 253 verschiedene Adressen in der DB. Kannst Du vielleicht nochmal drüber schauen.
Die Abfrage:

SELECT count(*) AS Dubletten , Strasse
from Adr
GROUP BY Strasse
HAVING COUNT(*) > 1 order by Dubletten
 
Du kannst das relativ leicht debuggen in dem du dir das Ergebnis von
Code:
SELECT ROW_NUMBER() OVER (PARTITION BY strasse ORDER BY ID) AS GroupNo,*
FROM Adr ORDER BY 1
anschaust dort siehst du wo er erneut anfängt zu zählen.
 
Werbung:
Hi,

versuch es anstatt der Funktion ROW_NUMBER() mal mit DENSE_RANK():

Code:
SELECT   DENSE_RANK() OVER (ORDER BY Adressefelder) AS AdressID

Viele Grüße,
Tommi
 
Zurück
Oben