Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme mit GROUP BY (https://www.delphipraxis.net/93723-probleme-mit-group.html)

scrat1979 10. Jun 2007 13:33

Datenbank: Absolute Database • Version: 5.13 • Zugriff über: Komponenten

Probleme mit GROUP BY
 
Hallo zusammen,

es geht um folgendes. ich schreibe gerade ein kleines Programm zur Fotodokumentation (Arztpraxis). die Tabellenstruktur sieht vereinfacht so aus:

Tabelle "patienten": lfdnr (AutoINC), Nachname, Vorname, Geburtsdatum
Tabelle "tbl_diagnosen": DiagNr (AutoINC), Zu_Patient (= lfdnr d. Tabelle "patienten"), Bezeichnung, Export (boolean).

Nun möchte ich alle Patienten der Tabelle "patienten" anzeigen lassen, bei denen eine Diagnose zum Export markiert worden ist (Export = true).

So weit bin ich schon:

SQL-Code:
select patienten.lfdnr, patienten.Nachname, patienten.vorname, patienten.geburtsdatum
from patienten, tbl_diagnosen
where (patienten.lfdnr = tbl_diagnosen.zu_patient) and (tbl_diagnosen.export = true)
Sollte ein Patient nun 2 Diagnosen zum Export markiert haben, dann erscheint der patient doppelt in der Abfrage-Tabelle. Folgende Anweisung liefert aber eine Fehlermeldung (sollte es wichtig sein, werde ich sie natürlich nachliefern):

SQL-Code:
select patienten.lfdnr, patienten.Nachname, patienten.vorname, patienten.geburtsdatum
from patienten, tbl_diagnosen
where (patienten.lfdnr = tbl_diagnosen.zu_patient) and (tbl_diagnosen.export = true)
group by patienten.lfdnr
Frage: Wie lassen sich bei den erhaltenen Datansätze die doppelten herausfiltern? Hoffe Ihr könnt mir ein wenig auf die Sprünge helfen...

SCRaT

DeddyH 10. Jun 2007 13:37

Re: Probleme mit GROUP BY
 
SQL-Code:
select patienten.lfdnr, patienten.Nachname, patienten.vorname, patienten.geburtsdatum, count(tbl_diagnosen.export)
from patienten, tbl_diagnosen
where (patienten.lfdnr = tbl_diagnosen.zu_patient) and (tbl_diagnosen.export = true)
group by patienten.lfdnr, patienten.Nachname, patienten.vorname, patienten.geburtsdatum
Ungetestet

r_kerber 10. Jun 2007 13:38

Re: Probleme mit GROUP BY
 
Wenn Du mit GROUP BY arbeitest, dann dürfen IMHO im SELECT nur gruppierte Felder und Aggregatfunktionen stehen. Ein Workarround wäre die Anwendung der Funktion MAX auf die einzelnen Felder, falls es gibt auch die Funktion First. Oder Du gruppierst auch über die anderen Felder im SELECT.

Ooops, da war jemand schneller...

mkinzler 10. Jun 2007 13:38

Re: Probleme mit GROUP BY
 
Beim Group by muß jedes Feld entweder in der Gruppierung stehen oder als Aggegat vorliegen

scrat1979 10. Jun 2007 13:41

Re: Probleme mit GROUP BY
 
Vielen Dank an alle!

Die Lösung von DeddyH funktioniert problemlos, sogar ohne "count(*) !!

Hier mein Code:

SQL-Code:
select patienten.lfdnr, patienten.Nachname, patienten.vorname, patienten.geburtsdatum
from patienten, tbl_diagnosen
where (patienten.lfdnr = tbl_diagnosen.zu_patient) and (tbl_diagnosen.export = true)
group by patienten.lfdnr, patienten.Nachname, patienten.vorname, patienten.geburtsdatum
Nochmal thanks für die schnelle Hilfe. Darauf wäre ich - trotz langem suchen im iNet - nie draufgekommen :-)

SCRaT

DeddyH 10. Jun 2007 13:44

Re: Probleme mit GROUP BY
 
Zitat:

Zitat von scrat1979
sogar ohne "count(*)

Das war auch nur rein informativ gemeint (ich wusste ja nicht, ob Du es verwenden willst). :zwinker:

mquadrat 11. Jun 2007 09:19

Re: Probleme mit GROUP BY
 
Wäre ein

SQL-Code:
select distinct patienten.lfdnr, patienten.Nachname, patienten.vorname, patienten.geburtsdatum
from patienten, tbl_diagnosen
where (patienten.lfdnr = tbl_diagnosen.zu_patient) and (tbl_diagnosen.export = true)
nicht schneller?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 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