Ein häufiges Szenario ist eine Tabelle, die verschiedene Einträge mit einem bestimmten Datum beinhaltet, und für die dann Monatssummen für die Häufigkeit des Auftretens der Ereignisse ermittelt werden sollen:
z.B. eine Tabelle, die Beschwerdeneingänge erfasst, mit folgenden Beispielaufbau (vereinfacht)
ID, Beschwerde, Datum, Kunde
Kunde_id verweist dabei auf eine andere Tabelle Kunden. Beide verknüpft über ein ID-Feld. z.B. könnten folgende Datensätze erfasst sein:
1, Beschwerde 1, 17.02.2008, 993
2, Beschwerde 2, 19.02.2008, 1001
3, Beschwerde 3, 17.03.2008, 993
Nun möchte man z.B. ausgeben, wieviele Beschwerden pro Kunde in den einzelnen Monaten erfasst worden sind.
Folgende Query für eine Tabelle Beschwerde würde dies ermitteln:
abfrage:=‘SELECT firma, Monat, Jahr, count(*) AS Anzahl, dateasStr FROM (SELECT firma, EXTRACT(Month FROM
Beschwerde.datum ) AS Monat, EXTRACT(Year FROM Beschwerde.datum ) AS Jahr,
Trim(Cast(EXTRACT(Month FROM Beschwerde.datum ) as Char(2))) || ‚+QuotedStr(‚/‘)+‘ ||
Cast(EXTRACT(Year FROM Beschwerde.datum ) as Char(4)) AS DateAsStr FROM beschwerde inner join
kundentabelle on kundentabelle.id=beschwerde.kunde ) as Beschwerde GROUP BY dateasstr,Jahr, Monat,
firma order by jahr desc‚;
Daraus ergebe sich dann z.B. folgendes Ergebnis
Firma Monat Jahr Anzahl DateAsStr
Musterfirma 2 2008 2 02/2008
DateAsStr ergibt sich aus dem Konstrukt
Trim(Cast(EXTRACT(Month FROM Beschwerde.datum ) as Char(2))) || ‚+QuotedStr(‚/‘)+‘ ||
Cast(EXTRACT(Year FROM Beschwerde.datum ) as Char(4)) AS DateAsStr
Natürlich nicht zwingend erforderlich, aber wie im echten Fall, nützlich, um z.B. gleich die passende Achsenbeschriftung für ein Chart zu haben.
Das SQL-Statement wurde für NexusDB generiert, für andere Datenbanken ist u.U. eine Anpassung notwendig.