Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Datensätze gruppieren nach Monat

707 views
Skip to first unread message

Michael Düsterwald

unread,
Feb 8, 2000, 3:00:00 AM2/8/00
to
Hallo,
ich habe folgende 2 SQL - Probleme :

1. In einer Tabelle sind Datensätze mit den Feldern Datum und Umsatz
diese Felder möchte ich nach Monat gruppieren.

Mit dem Statement

select
extract( month from datum) as monat,
sum(ums) as umsatz
from umsatz.db
group by monat


funktioniert es leider nicht

Weiß jemand den richtigen Syntax ?


2. Wenn ich GROUP BY verwende, sehe ich im DBGrid nur die Datensätze, die
zu der jeweiligen Gruppe gehören.
Gibt es eine Möglichkeit noch andere Datenfelder sichtbar zu machen ?


Dirk Kleist

unread,
Feb 8, 2000, 3:00:00 AM2/8/00
to
Michael Düsterwald <MichaelDu...@t-online.de> schrieb in im
Newsbeitrag: 87og0n$86s$1...@news01.btx.dtag.de...

> Hallo,
> ich habe folgende 2 SQL - Probleme :
>
> 1. In einer Tabelle sind Datensätze mit den Feldern Datum und Umsatz
> diese Felder möchte ich nach Monat gruppieren.
>
> Mit dem Statement
>
> select
> extract( month from datum) as monat,
> sum(ums) as umsatz
> from umsatz.db
> group by monat
>
> funktioniert es leider nicht
>
> Weiß jemand den richtigen Syntax ?
In der GROUP BY clausel duerfen keine Spaltenaliase verwendet werden, da die
GROUP BY Clausel vor dem SELECT ausgewertet wird.

select
extract( month from datum) as monat,
sum(ums) as umsatz
from umsatz.db

group by extract( month from datum)

sollte funktionieren (geht jedenfalls mit ORACLE)


> 2. Wenn ich GROUP BY verwende, sehe ich im DBGrid nur die Datensätze, die
> zu der jeweiligen Gruppe gehören.
> Gibt es eine Möglichkeit noch andere Datenfelder sichtbar zu machen ?

welche denn, die ohne Monat ?

Michael Düsterwald

unread,
Feb 8, 2000, 3:00:00 AM2/8/00
to

Dirk Kleist <d.kl...@img-tech.de> schrieb in im Newsbeitrag:
87otra$5s0$1...@checkov.baltic.net...

> Michael Düsterwald <MichaelDu...@t-online.de> schrieb in im
> Newsbeitrag: 87og0n$86s$1...@news01.btx.dtag.de...
> > Hallo,
> > ich habe folgende 2 SQL - Probleme :
> >
> > 1. In einer Tabelle sind Datensätze mit den Feldern Datum und Umsatz
> > diese Felder möchte ich nach Monat gruppieren.
> >
> > Mit dem Statement
> >
> > select
> > extract( month from datum) as monat,
> > sum(ums) as umsatz
> > from umsatz.db
> > group by monat
> >
> > funktioniert es leider nicht
> >
> > Weiß jemand den richtigen Syntax ?
> In der GROUP BY clausel duerfen keine Spaltenaliase verwendet werden, da
die
> GROUP BY Clausel vor dem SELECT ausgewertet wird.
>
> select
> extract( month from datum) as monat,
> sum(ums) as umsatz
> from umsatz.db
> group by extract( month from datum)

>
> sollte funktionieren (geht jedenfalls mit ORACLE)

Leider mit Paradox nicht.

> > 2. Wenn ich GROUP BY verwende, sehe ich im DBGrid nur die Datensätze,
die
> > zu der jeweiligen Gruppe gehören.
> > Gibt es eine Möglichkeit noch andere Datenfelder sichtbar zu machen ?
> welche denn, die ohne Monat ?

Zum Beispiel ein Feld Namens "Kundennummer", klar andere Felder müssen in
der Gruppe
nicht unbedingt eindeutig sein, aber in meinem Anwendungsfall ist das
gegeben.
Mir würde es genügen, wenn die Werte des 1. Datensatzes in den zusätzlichen
Felder ausgegen wird.


Dirk Kleist

unread,
Feb 8, 2000, 3:00:00 AM2/8/00
to

Michael Düsterwald <MichaelDu...@t-online.de> schrieb in im
Newsbeitrag: 87p1bf$u23$1...@news02.btx.dtag.de...
> Leider mit Paradox nicht.
eventuell liegt es an der extract-Funktion ?
Folgendes geht mit ORACLE bei Feldtyp DATE fuer dstart, sonst koennte man es
ja zunaechst mit eine extraspalte fuer den monat versuchen (ob es
prinzipiell geht)
select To_Char(dstart,'MM') from fertigungsprogramm
group by To_Char(dstart,'MM')

> Zum Beispiel ein Feld Namens "Kundennummer", klar andere Felder müssen in
> der Gruppe
> nicht unbedingt eindeutig sein, aber in meinem Anwendungsfall ist das
> gegeben.
> Mir würde es genügen, wenn die Werte des 1. Datensatzes in den
zusätzlichen
> Felder ausgegen wird.

Bei Abfragen mit Gruppierung müssen alle angezeigten Felder in der GROUP BY
clausel enthalten sein.
Das wuerde dann jedoch fuer jeden Monat und jede Kundennummer einen
Datensatz ergeben.
In einem Formolar zur Datenanzeige koennte man ja sonst eine zweite Abfrage
plazieren oder eine master-detail-Abfrage installieren.

hope this helps

Marian Aldenhövel

unread,
Feb 8, 2000, 3:00:00 AM2/8/00
to
Hi,

>select
>extract( month from datum) as monat,
>sum(ums) as umsatz
>from umsatz.db
>group by monat
>>
>funktioniert es leider nicht

Ich habe leider keine passende Tabelle zur Hand.

>Weiß jemand den richtigen Syntax?

Ist es denn ein Syntax-Problem? Bekommst Du denn einen ordentliche
Fehler?

Ich könnte mir eher vorstellen, daß das GROUP BY auf die mit EXTRACT
erzeugte Spalte vielleicht nicht funktioniert. Dann hülfe nur eine
extra (echte, redundante) Spalte Monat.

>2. Wenn ich GROUP BY verwende, sehe ich im DBGrid nur die Datensätze, die
>zu der jeweiligen Gruppe gehören.
>Gibt es eine Möglichkeit noch andere Datenfelder sichtbar zu machen?

Das verstehe ich nicht. Du siehst die Felder, die den Gruppenschlüssel
bilden - in diesem Fall "Monat" und die anderen, die Du selektiert
hast - hier den Gesamtumsatz. Natürlich kannst Du auch noch mehr
Felder dazuselektieren, aber sie müssen entweder im GROUP BY
auftauchen, oder durch Aggregatfunktionen berechnet sein. Also wäre

SELECT Monat,Sum(Ums) AS GesamtUmsatz,Count(Ums) AS Anzahl_Umsaetze
FROM Umsatz
GROUP BY Monat;

gültig.

Du kannst aber nicht einfach etwas machen wie

SELECT Monat,Name FROM Umsatz GROUP BY Monat;

Weil nicht definiert wäre, _welcher_ Name-Wert hier gemeint ist. Du
hast dann zwei Möglichkeiten: Entweder Du gruppierst auch nach den
gleichen Namen (GROUP BY Monat,Name), oder Du setzt ein Aggregat drum.
Zum Beispiel MIN(Name), dann bekommst Du eben den lexikalisch
kleinsten Namen angezeigt - macht hier nicht viel Sinn, ich weiß :-).

Ciao, MM

0 new messages