Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi "Doppelte" Datensätze ignorieren (https://www.delphipraxis.net/91733-doppelte-datensaetze-ignorieren.html)

BOH 9. Mai 2007 09:18

Datenbank: ADS • Version: 6.11 • Zugriff über: mit ADAC auf DBF

"Doppelte" Datensätze ignorieren
 
Hallo DPler,

ich hänge ein wenig fest, obwohl ich die Suche bereits benutzt habe. So richtig finde ich keine Lösung oder habe Tomaten auf den Augen :pale:

Ich habe eine Tabelle mit gut 80.000 Datensätzen, mit folgendem (verkürztem) Aufbau:

ID, Firma1, Firma2, ..., Vorname, Nachname, ...

Die ID kann mehrfach vorkommen, ist aber eindeutig für jede Firma. Ich versuche nun "doppelte" Datensätze zu filtern. Soll heißen, ich möchte nur einen Datensatz je Firma erhalten, die ich dann in eine separate Tabelle schreiben möchte.

Verwende ich in der Abfrage "distinct", bringt das ja nichts, da durch Unterschiede in den Vor- und Nachnamen, die Sätze nicht doppelt sind. Und so erscheinen dann wieder alle Sätze.

Wie mache ich es nun, daß ich von einer Firma genau einen Satz erhalte?

mkinzler 9. Mai 2007 09:29

Re: "Doppelte" Datensätze ignorieren
 
Durch Gruppieren.
BTW die bezeichnung ID suggeriert eigentlich eine Eindeutigkeit

BOH 9. Mai 2007 09:34

Re: "Doppelte" Datensätze ignorieren
 
Hallo mkinzler,

das ist richtig, die Bezeichnung ID suggeriert eine Eindeutigkeit, wird aber jeweils einer Firma zugeordnet und kann leider mehrfach vorkommen. Liegt auch nicht in meiner Verantwortung, da ich die Daten in der Form gestellt bekomme.

Wenn ich nun mit "Group By ID" die Daten einer Firma zusammenfasse, wie exportiere ich dann nur jeweils einen Satz aus dieser Gruppe? Wobei es keine Rolle spielt, welcher Satz das ist. Meinetwegen jeweils der Erste.

mkinzler 9. Mai 2007 09:39

Re: "Doppelte" Datensätze ignorieren
 
Zitat:

Wenn ich nun mit "Group By ID" die Daten einer Firma zusammenfasse, wie exportiere ich dann nur jeweils einen Satz aus dieser Gruppe?
Ja . In diesem Fall würde sich das MIN()-Aggregat anbieten.

BOH 9. Mai 2007 09:53

Re: "Doppelte" Datensätze ignorieren
 
Hm, wenn ich nun folgendes versuche

SQL-Code:
select min(id), firma1, firma2, vorname, nachname
from <tabelle>
group by firma1, firma2, vorname, nachname
dann bekomme ich weiterhin doppelte Datensätze :gruebel:

mkinzler 9. Mai 2007 09:57

Re: "Doppelte" Datensätze ignorieren
 
Gerade andersrum:
SQL-Code:
select id, min(firma1), min(firma2), min(vorname), min(nachname)
from <tabelle>
group by id;

BOH 9. Mai 2007 10:02

Re: "Doppelte" Datensätze ignorieren
 
:shock: :wall: :mrgreen:

Danke mkinzler :thumb:

joachimd 9. Mai 2007 10:13

Re: "Doppelte" Datensätze ignorieren
 
Zitat:

Zitat von mkinzler
Gerade andersrum:
SQL-Code:
select id, min(firma1), min(firma2), min(vorname), min(nachname)
from <tabelle>
group by id;

Gefährlich: Dann bekommst Du aus einer Kombination ("Adam Muster", "Max Anderson") einen "Adam Anderson"!
Besser: Es gibt eine Pseudo-Spalte namens Rowid:
SQL-Code:
create table #test(id integer, firma1 cichar(20), firma2 cichar(20), vorname cichar(20), nachname cichar(20));
insert into #test values(1,'f1','f2','Adam','Muster');
insert into #test values(1,'f123','f234','Max','Anderson');
insert into #test values(2,'firma','irgendwas','Hans','Wurst');
insert into #test values(2,'f','häh?','Adam','Franz');
insert into #test values(2,'f1','<leer>','Joe','Doe');
insert into #test values(3,'sinnvoll','sinnlos','Fritz','Fischer');

select * from #test where rowid in (select min(rowid) from #test group by id);

ibp 9. Mai 2007 10:21

Re: "Doppelte" Datensätze ignorieren
 
SQL-Code:
select * from #test where rowid in (select distinct rowid from #test);
ginge dann doch auch..

BOH 9. Mai 2007 10:28

Re: "Doppelte" Datensätze ignorieren
 
Oops, ja, tückische Falle :shock: Thanks, Joachim :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz