Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Eindeutige Datensätze ermitteln (https://www.delphipraxis.net/183764-eindeutige-datensaetze-ermitteln.html)

Walter Landwehr 3. Feb 2015 09:52

Datenbank: Firebird • Version: 2,5 • Zugriff über: IBO

Eindeutige Datensätze ermitteln
 
Hallo,

vielleicht kann mir jemand einen Tipp geben.

Ich habe eine Tabelle mit dem Feld ICD. In diesem Feld können gleichlautende Einträge sein.
Ich benötige nun ein SQL Statement welches mir alle Datensätze der Tabelle liefert, aber nur einen Datensatz wo im Feld ICD gleichlautende Einträge sind.

Normal kann ich ja die Datensätze so filtern:

select icd
from tbl_diagnose
group by icd
having count (*) > 1

Aber ich benötige noch das Feld Diagnosenr dazu. Dieses Feld ist ein Eindeutiger Wert der per Generator erzeugt wird. Wenn ich das Feld Diagnosenr dazu mache ist das Ergebnis leer. Ist ja auch logisch.

Gibt es da einen Tipp.

Vielen Dank im voraus.

baumina 3. Feb 2015 10:09

AW: Eindeutige Datensätze ermitteln
 
SQL-Code:
select distinct icd, Diagnosenr
from tbl_diagnose

mkinzler 3. Feb 2015 10:11

AW: Eindeutige Datensätze ermitteln
 
Und Diagnosenummer welches Datensatzes soll dann genommen werden?

Walter Landwehr 3. Feb 2015 10:23

AW: Eindeutige Datensätze ermitteln
 
An Baumina,

so geht es nicht, distinct geht nur auf einem Feld. Dein Statement bringt auch alle Datensätze wo icd mehrfach vorkommt. Ich möchte alle Datensaätze einer Tabelle, aber nur einen wo icd gleich ist.

baumina 3. Feb 2015 10:37

AW: Eindeutige Datensätze ermitteln
 
SQL-Code:
select icd, Diagnosenr
from tbl_diagnose
group by icd
evtl. noch ein
SQL-Code:
order by icd, Diagnosenr

mkinzler 3. Feb 2015 10:46

AW: Eindeutige Datensätze ermitteln
 
Das 1. Statement ist fehlerhaft und beim 2. bekommt er wieder alle.

Er beenötigt ein Aggegat, deshalb meien Frage, welchen DS er will ( ersten/letzten, kleinsten/größten, Durchschnitt, ...)

baumina 3. Feb 2015 10:51

AW: Eindeutige Datensätze ermitteln
 
Ich dachte er will alle, nur von den doppelten nur je einen.

Edit: ja statt dem Group by kann man auch min(Diagnosenr) machen, stimmt.

Walter Landwehr 3. Feb 2015 10:58

AW: Eindeutige Datensätze ermitteln
 
Genau richtig, ich will alle Datensätze aber nur jeweils einen wo icd mehrfach ist.

Walter Landwehr 3. Feb 2015 11:02

AW: Eindeutige Datensätze ermitteln
 
So scheint es zu gehen, muss ich aber noch genauer testen.

select icd, min(Diagnosenr) as Nummer
from tbl_diagnose
group by icd

pelzig 3. Feb 2015 11:37

AW: Eindeutige Datensätze ermitteln
 
Du kannst Dich 100%ig auf jeden SQL-Dialekt verlassen!

Nur den selbstprogrammierten Sachen musst Du stets mißtrauen!

MfG

p80286 3. Feb 2015 12:01

AW: Eindeutige Datensätze ermitteln
 
Zitat:

Zitat von pelzig (Beitrag 1288717)
Du kannst Dich 100%ig auf jeden SQL-Dialekt verlassen!

Aber macht die Anweisung auch was er sich vorgestellt hat? das zu formulieren ist eine Hürde, die manch einer nie überwindet.
(chapeau an Markus)

Gruß
K-H

Dejan Vu 3. Feb 2015 14:17

AW: Eindeutige Datensätze ermitteln
 
SQL-Code:
select * from tbl_diagnose
where icd in(
  select icd
    from tbl_diagnose
   group by icd
  having count (*) > 1
  )
Aus der Tabelle werden jetzt alle Datensätze aufgelistet, bei denen 'icd' nicht eindeutig ist.
Ich gehe mal davon aus, das Firebird das so kann.

SvB 3. Feb 2015 19:42

AW: Eindeutige Datensätze ermitteln
 
Kannst Dir auch mal das hier ansehen.

dataspider 4. Feb 2015 12:56

AW: Eindeutige Datensätze ermitteln
 
Code:
select
  d.icd
, (select list(x.diagnosenr) from tbl_diagnose x where x.icd = d.icd) diagnosenr
  from
   
    (
      select icd
        from tbl_diagnose
        group by icd
        having count (*) > 1
    ) d
Frank

[EDIT]
Geht ja gar nicht, icd ist ja nicht eindeutig.
Die Diagnosenummer kannst du ja nicht dahinter schreiben, es sei denn, diese ist auch pro icd eindeutig, dann geht first 1.
Du kannst du die Liste der Nummern mit List(diagnosenr) dahinter schreiben...

marsupilami79 4. Feb 2015 15:11

AW: Eindeutige Datensätze ermitteln
 
Moin :)

Wenn du alle Diagnosenummern brauchst, würde ich sowas hier versuchen:
Code:
select icd, list(diagnosenr)
from tbl_diagnose
group by icd
having count (*) > 1
Grüße,

Jan


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr.

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