AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi "Doppelte" Datensätze ignorieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Doppelte" Datensätze ignorieren

Ein Thema von BOH · begonnen am 9. Mai 2007 · letzter Beitrag vom 9. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#1

"Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 10:18
Datenbank: ADS • Version: 6.11 • Zugriff über: mit ADAC auf DBF
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

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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 10:29
Durch Gruppieren.
BTW die bezeichnung ID suggeriert eigentlich eine Eindeutigkeit
Markus Kinzler
  Mit Zitat antworten Zitat
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#3

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 10:34
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.
Gruß
BOH
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 10:39
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.
Markus Kinzler
  Mit Zitat antworten Zitat
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#5

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 10:53
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
Gruß
BOH
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 10:57
Gerade andersrum:
SQL-Code:
select id, min(firma1), min(firma2), min(vorname), min(nachname)
from <tabelle>
group by id;
Markus Kinzler
  Mit Zitat antworten Zitat
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#7

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 11:02


Danke mkinzler
Gruß
BOH
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#8

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 11:13
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);
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 11:21
select * from #test where rowid in (select distinct rowid from #test); ginge dann doch auch..
  Mit Zitat antworten Zitat
BOH

Registriert seit: 6. Feb 2007
50 Beiträge
 
Delphi 5 Professional
 
#10

Re: "Doppelte" Datensätze ignorieren

  Alt 9. Mai 2007, 11:28
Oops, ja, tückische Falle Thanks, Joachim
Gruß
BOH
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 Uhr.
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