Hilfe bei SQL Script
Hallo liebe Forenmitglieder und Entwickler,
ich habe folgendes Problem:
In unserer Datenbank gibt es mehrere Kunden die mehrmals vorhanden sind.
Ich möchte nun nur einen einzelnen Kunden haben. Dieser soll eine neue eindeutige ID bekommen, im Moment hat der gleiche Kunde immer eine andere ID
Bsp:
Name Artikel ID
Klaus Müller Mainboard ASUS 1255
Klaus Müller Prozessor Athlon X4 258
Dies liegt daran, das der Kunde als Neukunde jedesmal aufgenommen wurde.
Nun plane ich folgendes Bild:
Name Artikel Kunden_ID
Klaus Müller Mainboard ASUS 1
Klaus Müller Prozessor Athlon X4 1
Beate Fuchs Laptop 2
Bernd Maler Regal 3
Urusla Brückenkopf Laptop 4
Urusla Brückenkopf Blumenvase 4
Da es mehr als 150000 Kunden sind die dies betrifft suche ich Hilfe bei dem SQL Script.
Da die Telefonnummer des Kunden eindeutig ist habe ich gedacht, diese zu zählen wo die Anzahl > 1 ist
und dann die ID zu vergeben als fortlaufende Nummer, sobald ein neuer Kunde kommt muss der Zähler
um 1 erhöht werden, also wenn sich die Telefonnummer ändertl.
ich hoffe es ist halbwegs verständlich.
Vielen lieben Dank im Voraus
Sven
ich habe folgendes Problem:
In unserer Datenbank gibt es mehrere Kunden die mehrmals vorhanden sind.
Ich möchte nun nur einen einzelnen Kunden haben. Dieser soll eine neue eindeutige ID bekommen, im Moment hat der gleiche Kunde immer eine andere ID
Bsp:
Name Artikel ID
Klaus Müller Mainboard ASUS 1255
Klaus Müller Prozessor Athlon X4 258
Dies liegt daran, das der Kunde als Neukunde jedesmal aufgenommen wurde.
Nun plane ich folgendes Bild:
Name Artikel Kunden_ID
Klaus Müller Mainboard ASUS 1
Klaus Müller Prozessor Athlon X4 1
Beate Fuchs Laptop 2
Bernd Maler Regal 3
Urusla Brückenkopf Laptop 4
Urusla Brückenkopf Blumenvase 4
Da es mehr als 150000 Kunden sind die dies betrifft suche ich Hilfe bei dem SQL Script.
Da die Telefonnummer des Kunden eindeutig ist habe ich gedacht, diese zu zählen wo die Anzahl > 1 ist
und dann die ID zu vergeben als fortlaufende Nummer, sobald ein neuer Kunde kommt muss der Zähler
um 1 erhöht werden, also wenn sich die Telefonnummer ändertl.
ich hoffe es ist halbwegs verständlich.
Vielen lieben Dank im Voraus
Sven
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 269928
Url: https://administrator.de/forum/hilfe-bei-sql-script-269928.html
Ausgedruckt am: 09.01.2025 um 03:01 Uhr
3 Kommentare
Neuester Kommentar
Moin mastertulle,
das ist nicht ganz zu Ende gedacht, fürchte ich.
Erstens - und ziemlich am Wichtigsten: von welcher Datenbank reden wir (Oracle, mySQL, MSSQL..). ?
Zweitens - die Bereinigung bzw. Migration der vorhandenen Daten ist eine Sache.
Interessanter ist der Punkt, wie denn die Applikation/das Frontend in Zukunft feststellen soll, ob eine neue ID vergeben werden soll oder bereits eine brauchbare vorhanden ist.
So, wie du es sehr, sehr optimistisch darstellst ist eine Telefonnummer etwas Eindeutiges.
Das deckt sich überhaupt nicht mit meiner Wahrnehmung.
Wenn ich irgendwo in einem Formular Name, Vorname und Telefonnummer angeben muss, dann ergibt das je nach Wochentag und Laune
In keinem dieser Fälle hätte ich etwas richtig Falsches angegeben und jeder telefonische Rückfrageversuch würde mein Telefon klingeln lassen.
Aber dieser Max Mustermann hätte bei dir mehrere IDs.
Heisst:
Ich halte einerseits die Telefonnummer für ungeeignet (da eben nicht eindeutig im unnormierten Zustand).
Andererseits: Wenn du mich davon überzeugst, dass die Telefonnummer bei dir eindeutig ist, dann... okay, ist sie eben eindeutig.
WTF brauchst du dann eine künstliche ID?
Grüße
Biber
das ist nicht ganz zu Ende gedacht, fürchte ich.
Erstens - und ziemlich am Wichtigsten: von welcher Datenbank reden wir (Oracle, mySQL, MSSQL..). ?
Zweitens - die Bereinigung bzw. Migration der vorhandenen Daten ist eine Sache.
Interessanter ist der Punkt, wie denn die Applikation/das Frontend in Zukunft feststellen soll, ob eine neue ID vergeben werden soll oder bereits eine brauchbare vorhanden ist.
So, wie du es sehr, sehr optimistisch darstellst ist eine Telefonnummer etwas Eindeutiges.
Das deckt sich überhaupt nicht mit meiner Wahrnehmung.
Wenn ich irgendwo in einem Formular Name, Vorname und Telefonnummer angeben muss, dann ergibt das je nach Wochentag und Laune
"Mustermann", "Max", "0815/47110022"
"Mustermann", "Max", "(0815) 47110022"
"Mustermann", "Max", "(049) 815 47110022"
"Mustermann", "Max", "(0049) 815 47110022"
"Mustermann", "Max", "+49 815 47110022"
"Mustermann", "Max", "0815 / 47 11 00 22"
"Mustermann", "Max", "0815 / 471 100 22"
...
In keinem dieser Fälle hätte ich etwas richtig Falsches angegeben und jeder telefonische Rückfrageversuch würde mein Telefon klingeln lassen.
Aber dieser Max Mustermann hätte bei dir mehrere IDs.
Heisst:
Ich halte einerseits die Telefonnummer für ungeeignet (da eben nicht eindeutig im unnormierten Zustand).
Andererseits: Wenn du mich davon überzeugst, dass die Telefonnummer bei dir eindeutig ist, dann... okay, ist sie eben eindeutig.
WTF brauchst du dann eine künstliche ID?
Grüße
Biber
Moin mastertulle,
okay, wenn du es sagst, dann nehme ich mal die Telefonnummer als eindeutig an.
Dann würde dir dieses Statement deinen Kundenstamm incl.neu generierter KundenID liefern:
wobei der Tabellenname geraten ist und Artikel nur als Dekoration angezeigt wird.
Wenn du bei deinen 150000 Kunden allerdings auch nur 0,001 Prozent dabei hast, die aus ethischen oder religiösen Gründen keine Telefonnummer haben (Telnr IS NULL), dann brauchst du eine Verfeinerung.
Andernfalls kannst du dir deinen Kundenstamm neu anlegen:
Ungetestet und nur als Skizze zu verstehen.
Oder (ich habe nicht nachgeschaut, ob MSSQL ein "CREATE TABLE AS SELECT.." implementiert hat) eine leere Tabelle "Kundenstamm" anlegen und mit obigem abgewandeltem Statement mit "INSERT INTO Kundenstamm" füllen.
Eine weitere Variante wäre die Definition der KUNDE_ID als "Autowert".
Dann kannst du eine neu angelegte "Kundenstamm" -Tabelle füllen mit den DISTINCT-Werten Name, Telnr oder einem Resultset Name, Telnr GROUP by name, telnr, jeweils ohne Angabe der Kunden_ID, die ja generiert wird.
In beiden Fällen wäre es allerdings unüblich, die Kunden_ID bei 1 anfangen zu lassen - ein Kunde mit der Kunden_Id 1 wird auf einen Treuerabatt von 25% bestehen.
Lass die also von dem Wert 18523 an beginnen.
Grüße
Biber
okay, wenn du es sagst, dann nehme ich mal die Telefonnummer als eindeutig an.
Dann würde dir dieses Statement deinen Kundenstamm incl.neu generierter KundenID liefern:
SELECT ROW_NUMBER() OVER(ORDER BY name, telnr) AS NewKundenID,
name, telnr, Artikel
FROM Bestellungen
Wenn du bei deinen 150000 Kunden allerdings auch nur 0,001 Prozent dabei hast, die aus ethischen oder religiösen Gründen keine Telefonnummer haben (Telnr IS NULL), dann brauchst du eine Verfeinerung.
Andernfalls kannst du dir deinen Kundenstamm neu anlegen:
CREATE table Kundenstamm as
Select distinct Kunden_id , Name, TelNr from (
SELECT ROW_NUMBER() OVER(ORDER BY name, telnr) AS Kunden_ID,
name, telnr
FROM Bestellungen
) x
Ungetestet und nur als Skizze zu verstehen.
Oder (ich habe nicht nachgeschaut, ob MSSQL ein "CREATE TABLE AS SELECT.." implementiert hat) eine leere Tabelle "Kundenstamm" anlegen und mit obigem abgewandeltem Statement mit "INSERT INTO Kundenstamm" füllen.
Eine weitere Variante wäre die Definition der KUNDE_ID als "Autowert".
Dann kannst du eine neu angelegte "Kundenstamm" -Tabelle füllen mit den DISTINCT-Werten Name, Telnr oder einem Resultset Name, Telnr GROUP by name, telnr, jeweils ohne Angabe der Kunden_ID, die ja generiert wird.
In beiden Fällen wäre es allerdings unüblich, die Kunden_ID bei 1 anfangen zu lassen - ein Kunde mit der Kunden_Id 1 wird auf einen Treuerabatt von 25% bestehen.
Lass die also von dem Wert 18523 an beginnen.
Grüße
Biber