Autor Beitrag
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Di 22.10.02 14:37 
HAllo,

der titel sagt irgendwie schon alles.
ich raff irgendwie nicht, wie die ergebnisse aussehen. Und was das Group by eigentlich soll.

Gruß
KEn
Alfons-G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: Di 22.10.02 16:17 
Das Ganze ist eigentlich recht simpel. Mit group by kannst Du Datensätze zusammenfassen, welche in bestimmten Feldern identische Werte enthalten.
Angenommen, Du hast eine Tabelle, in der sind Kunden und offene Rechnungen enthalten:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Name           Datum     Betrag
-----------------------------------
Maier          15.09.02  1535,50
Huber          16.10.02   350,00
Maier          17.10.02   550,25
Schmidt        18.10.02  1010,00
Schmidt        19.10.02   317,30
Schuldner      08.08.02  1111,10
Jetzt willst Du wissen, wieviel jeder einzele Kunde Dir schuldig ist:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
select 
Name, sum(Betrag) as Summe 
from 
Offen
group by
Name 
order by 
Name
/

Name           Betrag
-------------------------
Huber           350,00
Maier          1885,75
Schmidt        1327,30
Schuldner      1111,10
Somit hast Du die Gesamtbeträge aller Kunden. Bei einer Abfrage mit Gruppierung ist es wichtig, dass jede Spalte entweder in der group by-Klausel enthalten ist, oder darauf eine Funktion ausgeführt wird.

Hättest Du also die Spalte "Datum" bei select mit aufgenommen, bekämst Du eine Fehlermeldung. Willst Du aber zusätzlich wissen, von wann die älteste Rechnung ist und wieviele offene Posten der Kunde hat, so kannst Du die Abfrage erweitern:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
select 
Name, min(Datum) as Seit, sum(Betrag) as Summe , count(Betrag) as Anzahl
from 
Offen
group by
Name 
order by 
Name
/

Name           Seit      Betrag    Anzahl
---------------------------------------------
Huber          16.10.02   350,00    1
Maier          15.09.02  1885,75    2
Schmidt        18.10.02  1327,30    2
Schuldner      08.08.02  1111,10    1
Ich hoffe, das Beispiel hat Dir geholfen

;)

_________________
Alfons Grünewald
CenBells Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Di 22.10.02 17:20 
danke, danke.
Das hat mir endlich mal geholfen... *g*