Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ergebnisse gruppieren? (https://www.delphipraxis.net/121523-ergebnisse-gruppieren.html)

Svenkan 29. Sep 2008 18:26

Datenbank: BDE • Zugriff über: TQuery

Ergebnisse gruppieren?
 
Hey Leute!
Folgendes: Ich möchte verschiedene Ergebnisse meiner Querys gruppieren.

Beispiel

Lehrer A hat heute in der 2. und 4. Stunde Vertretung in einer beliebigen Klasse, Lehrer B in der 3. und Lehrer C in der 5. und 6.
Nun möchte ich es so ausgegeben haben:

Es betrifft: Lehrer A (2.4.), Lehrer B (3.), Lehrer C (5.6.)

Dabei steht in der dbf in der Spalte 'WER' der Vertretungslehrer und in 'S' die Stunde.


Erster Versuch zum Auslesen:

Delphi-Quellcode:
  Query33.Close;
  Query33.SQL.Text := 'SELECT * FROM "VT'+sj+'"';
  Query33.SQL.Add('WHERE S NOT IN ("M","E","H") AND DATUM=:today');
  Query33.SQL.Add('ORDER BY WER ASC, S ASC');
  Query33.SQL.Add('GROUP BY WER');
  Query33.ParamByName('today').Value := today;
  Query33.Open;

Allerdings bekomm ich dann die Meldung:

Zitat:

Im Projekt VPlan.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Ungültiges Schlüsselwort
Symbol-String: GROUP
Zeilennummer 4'.

alzaimar 29. Sep 2008 18:29

Re: Ergebnisse gruppieren?
 
Nimm das 'ORDER BY' mal raus bzw. pack es ans Ende. Denn erst wird gruppiert und dann soll das Ergebnis der Gruppierung sortiert werden.

Und, äh. die BDE sollte man nicht mehr verwenden.

Svenkan 29. Sep 2008 18:41

Re: Ergebnisse gruppieren?
 
Danke erstmal, nun erhalte ich allerdings den Fehler:

Zitat:

Wenn ein GROUP BY existiert, muss sich jedes einfache Feld in den Projektoren im GROUP BY befinden.
Also ich war noch ein Freund von dämlichen Fehlermeldungen, aber entweder kommts daher, dass ich nur 3h geschlafen hab oder die Dunkelheit lässt mich das grad nicht raffen. :gruebel:
Ich habe alle nötigen Felder in den Query gepackt, daran kanns also nicht liegen.

Die BDE muss ich leider verwenden, dass das Eingabeprogramm leider selbst noch auf der BDE läuft und ich nicht der dafür zuständige Entwickler bin. ;)

mkinzler 29. Sep 2008 18:55

Re: Ergebnisse gruppieren?
 
Dann müssen die Felder als Aggregat abgefragt werden

Svenkan 29. Sep 2008 19:03

Re: Ergebnisse gruppieren?
 
So so..als Aggregat..

Das heißt im Klartext? :D

mkinzler 29. Sep 2008 19:17

Re: Ergebnisse gruppieren?
 
MIN(), MAX(), SUM(), AVG(), ...

Svenkan 29. Sep 2008 20:00

Re: Ergebnisse gruppieren?
 
Mh...
Mir ist nur grad unklar, wie ich die damit gruppieren soll. Hast du dafür evtl. ein Beispiel?

mkinzler 29. Sep 2008 20:08

Re: Ergebnisse gruppieren?
 
Alle Felder, nach denen du nicht gruppierst.

Svenkan 30. Sep 2008 07:26

Re: Ergebnisse gruppieren?
 
Ich soll also nach Feldern gruppieren, nach denen ich nicht gruppiere?! :wiejetzt:

DeddyH 30. Sep 2008 07:37

Re: Ergebnisse gruppieren?
 
Wenn ich mir die Aufgabenstellung durchlese, frage ich mich, was das mit Gruppierung zu tun hat. Es scheint ja eher eine Konkatenation der Ergebnisse zu sein.

mkinzler 30. Sep 2008 07:46

Re: Ergebnisse gruppieren?
 
Jedes Feld der Ergebnismenge muss entweder in der Gruppierung sein oder als Aggregat vorliegen

SQL-Code:
select
    Datum, sum( Umsatz) as gesamt, avg(Umsatz) as Durschnitt, min(Umsatz) als Minimum, Max( Umsatz) as Maximum, count( id) als Anzahl
from
    Umsaetze
group by
    Datum;
Es werden ja alle Datensätze die in der Gruppierung identisch sind zu einem Datensatz verschmolzen und deshalb müssen die anderen Werte ja zusammengefasst werden.

Svenkan 30. Sep 2008 08:00

Re: Ergebnisse gruppieren?
 
Zitat:

Zitat von DeddyH
Wenn ich mir die Aufgabenstellung durchlese, frage ich mich, was das mit Gruppierung zu tun hat. Es scheint ja eher eine Konkatenation der Ergebnisse zu sein.

Was würdest du denn dann sagen, wie man das am Besten lösen kann, wenn nicht durch Gruppierungen?

mkinzler 30. Sep 2008 08:01

Re: Ergebnisse gruppieren?
 
Nein eher durch Vereinigung (UNION)

sx2008 30. Sep 2008 08:23

Re: Ergebnisse gruppieren?
 
Gib' doch erst mal deine bisherigen Tabellen an. Zum Beispiel:
Code:
Tabelle Lehrer:
IdLehrer | Name      | Angestellt
===============================
1        | Müller    | True
2        | Pechstein | False
Du wirst sicher mehr als eine Tabelle brauchen. Deshalb musst du diese auch angeben:
Code:
Tabelle Stundenplan:
IdPlan| WoTag|Stunde|Klasse|Fach
=================================
     1| Mo  | 1    | 7a  |Mathe
     2| Mo  | 3    | 7a  |Englisch
So und jetzt musst du noch deine "Zieltabelle" angegeben; also die Datenmenge,
die du erhalten willst.
Das ist natürlich keine echte Tabelle, sondern das Wunschergebnis deiner Abfrage.
Ohne diese Angaben, werdet ihr häufig an einander vorbeireden, vorallem weil du (Svenkan)
noch nicht verstanden hast, was GROUP BY eigentlich bewirkt.

Svenkan 30. Sep 2008 12:31

Re: Ergebnisse gruppieren?
 
Hallo,

ich habe eine Tabelle, wo die Vertretungen gespeichert werden.

Dort gibt es die Spalten..

S (Stunde)
KLASSE
WER (Vertretungslehrer)
FUER (Fehlender Lehrer)
FACH
RAUM
BEM_SCH
BEM_LEH
WERT
BET_KLA
IDENT


Die Namen/Kürzel der Lehrer, sowie die Stundenpläne der Klassen stehen in seperaten Dateien und haben mit der Vertretungstabelle an sich nichts zutun.

GROUP BY war auch, von mir aus gesehn, die momentan ansehnlichste Lösung. Wenn ihr dort hingehend bessere Vorschläge etc habt, ist das natürlich wunderbar. Man lernt ja schließlich nie aus. :)

DeddyH 30. Sep 2008 12:40

Re: Ergebnisse gruppieren?
 
Was Du bräuchtest, wäre etwas wie GROUP_CONCAT von MySQL, wenn ich mich nicht irre. Da es sich ja anscheinend um DBase handelt (ansonsten korrigiere mich), sehe ich da schwarz. Bliebe nur noch ein "Zusammenfrickeln" der Ergebnismenge am Frontend.


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