PDA

Vollständige Version anzeigen : Dubletten aus Tebelle filten mit Zusatzfeldkriterium


Gast
21.03.2004, 14:50
Möchte in einer Tabelle alle Doubletten rausfilten und bis auf einen Datensatz löschen!


Ich Filtere die Doubletten jeweils auf (Vorname+Name+Strasse+Ort)
Im Feld Telnummer befindet sich je nach dem eine Telefonnummer. Ich möchte also zerst immer Datensätze löschen welche keine Telefonnummer enthalten! Ist das Feld Telnummer leer, ist es egal welche ich lösche!


Vorname Name Strasse Ort Telnummer Zusatz1 Zusatz2
Peter Muster Haupstrasse Basel 01.01.2002 blau
Peter Muster Haupstrasse Basel 033 111 222 22.12.2004
Peter Muster Haupstrasse Basel rot
Maja Brunner Rue Genf 021 333333
Maja Brunner Rue Genf 02.02.1999


Wie löse ich das in SQL.

Verwende bisherige SQL Abfrage, welche gur funktioniert. Nun gilt es aber noch die Zusatzliche Logik für die Telenummer zu realisieren!

Kann mir jemand helfen?

Bisheriger SQL Code: (Löscht Doubletten în Tabelle bis auf einen Datensatz)

DELETE (Select count(*) from tabelle9 as temp
where tabelle9.Vorname = temp.Vorname
and tabelle9.Name = temp.Name
and tabelle9.Strasse = temp.Strasse
and tabelle9.ID > temp.ID), Tabelle9.*
FROM Tabelle9
WHERE ((((Select count(*) from tabelle9 as temp
where tabelle9.Vorname = temp.Vorname
and tabelle9.Name = temp.Name
AND tabelle9.Strasse = temp.Strasse
and tabelle9.ID > temp.ID))>0));



DANKE für Hilfe....

Dani

letts
21.03.2004, 15:02
Hallo,

für den Fall, dass es eine einmalie Aktion ist, die Dubletten zu löschen, empfehle ich Dir eine neue und leere Tbl zu erstellen, die wie die "Quelltabelle" aufgebaut ist. Also per Copy&Paste und nur Struktur der Quelltabelle übernehmen.

Dann stellst du den Index so ein wie in der Grafik.
Damit wird nun ausgeschlossen, das ein DS doppelt in die Tabelle geschrieben wird.

Jetzt erstellst du eine Anfügeabfrage.

Quelltabelle ---> NeueTabelle

Er wird meckern, weil DS aufgrund von Schlüsselverletzungen nicht eingefügt werden konnten( Dubletten).

Thats it.

Gast
21.03.2004, 16:10
Danke... KAnn leider das *.jpg attachement nicht öffnen, da ich als GAST registriert bin!

Zur Antwort. Die erwähnte Filterung muss ich leider oft Anwenden können, da ich die Tabelle regelmässig updaten muss. Auf die Qualität der Updatedaten habe ich leider keinen Einfluss, desshalb suche ich eine Lösung, welche ich wiederkehrend und einfach verwenden kann.

Danke aber mal soweit,....

Dani

kama
21.03.2004, 16:22
Erstelle eien Löschabfrage

neues Feld

TelPrüf:istnull([Telefonnummer])

unert Kriterien trägst

Wahr oder -1 ein


Das löscht die alle Datensätze ohne telefonnummer.

daha1
22.03.2004, 08:07
Danke...

aber ich muss siese Abfrage in die SQL Abfrage integrieren.

Leider kann ich aber nicht gleich alle leeren Telnummerfelder löschen, da keine Regel für Telefonummer bestehen. D.h. einige haben Telnummern, andere nicht! (Und das auch in den Doubletten) Möchte einfach sicherstellen, das ich alle Verfügbaren Daten in der Tabelle behalte! (Siehe auch TabellenMUSTER!

Vielleicht gibt es eine Andere Lösung?

Gruess

dani

kama
22.03.2004, 08:53
Ich möchte also zerst immer Datensätze löschen welche keine Telefonnummer enthalten!

Dann lass als erstes diese Abfrage drüber laufen

DELETE IsNull([Telefonnum]) AS Ausdr1
FROM Tabelle1
WHERE (((IsNull([Telefonnum]))=True));

Dann deine Eigene

Geht aber auch imgekehrt. :D

daha1
22.03.2004, 14:32
Das ist nur zum Teil richtig!

Ich möchte alle Doubletten löschen!

Aber ein doppelter, oder x-facher Eintrag kann unterschiedlich sein, indem er zum Beispiel noch eine Telefonummer besitzt!

Name; Vorname; Strasse; Ort; Tel:nr; F1; F2

Muster; Peter; Hauptstrasse; Bern; ; ; ;
Muster; Peter; Hauptstrasse; Bern; 031 333 3333 ; ; ;
Muster; Peter; Hauptstrasse; Bern; 031 333 3333 ; ; ;
Muster; Peter; Hauptstrasse; Bern; ; ; ;
Borer, Walter...........

Ich will sicherstellen das ich in meinem File, dann später noch den Datensatz mit der Telnummer in der Tabelle habe.

Also in jedem Fall:
Muster; Peter; Hauptstrasse; Bern; 031 333 3333 ; ; ;


Ich muss als die Abfrage, Tel_nr. True oder False in der Doublettenabfrage integrieren, weiss aber mit meinen Kenntnissem leider nicht wie!

Hoffe du, oder jemand kann mir weiterhelfen!

Dani

kama
22.03.2004, 16:35
Hallo
Kleiner Anhang und den Ansatz den ich in solchen Fällen Bevorzuge.

Ich mache eine Tabellenerstellungsabfrage die mir nur die einzelnen DSatensätze asugibt. hat den Vorteil das die grunddaten erhalten bleiben.

daha1
22.03.2004, 17:54
DANKE KAMA

Funktioniert auf den 1 Anblick super!

Habe nur ein Problem.

Habe auch Doubletten die keine Telnr besitzten! Dann löscht es mir gar keine Doubletten aus der Tabelle raus!

Wenn in deinem Beispiel (Tabelle TEST) alle Telnummern gelöscht sind, werden keine Doubletten gelöscht!

Wenn wir das noch lösen können sind wir (du) top!

Gruess

Dani

kama
22.03.2004, 18:44
hallo
Das geht nur in zwei stufen, davon merkst du aber nichts brauchst nur eine Abfrage ausführen

kama
23.03.2004, 06:13
Hallo

Machdem ich eien Nacht drüber geschlafen habe gehts auch auf einmal

SELECT Test.Name, Test.Vorname, Test.Strasse, Test.Ort, Max(Test.Telnr) AS Telnr INTO Einzeldaten
FROM Test
GROUP BY Test.Name, Test.Vorname, Test.Strasse, Test.Ort
ORDER BY Test.Name;


Wenn du das in meine db einfügst hast du das was du willst

daha1
23.03.2004, 14:18
Hi kama

Du hast mir ja gestern abend noch ein zweites ZIP File mit einer Lösung gesendet!

Diese funktioniert bei mir einwandfrei. SUUUPPPPEEERRR!

Vielen Dank, ohne deine Hilfe hätte ich es nicht geschafft!

Nochmals Danke für deinen Einsatz!

Dani