Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Code für Summe nach Jahr (https://www.delphipraxis.net/46935-sql-code-fuer-summe-nach-jahr.html)

BlueStarHH 3. Jun 2005 11:43

Datenbank: Paradox • Zugriff über: TTable, TDataSource, TQuery

SQL-Code für Summe nach Jahr
 
Ich habe eine Paradox-Tabelle die u.a. folgende Felder hat (mit Beispieldaten):

Verkaufsdatum, Menge
01.07.1998, 2
12.08.1998, 5
06.08.2000, 1
25.12.2000, 3

Nun möchte daraus folgendes erhalten:

Jahr, Summe
1998, 7
2000, 4

Die Menge soll also nach Jahr aufsummiert werden. Wie mache ich das mit SQL?

Mein erster Versuch war:

SQL-Code:
select cast(extract (year from Verkaufsdatum) as character(4)), sum(Menge) from tabelle group by Verkaufsdatum
Das meckert die Delphi aber mit einer Exception der Klasse EDBEngineError an. Meldung: 'Ausdrücke in "group by" werden nicht unterstützt.'

jim_raynor 3. Jun 2005 12:05

Re: SQL-Code für Summe nach Jahr
 
SQL-Code:
select cast(extract (year from Verkaufsdatum) as character(4)), sum(Menge) from tabelle group by cast(extract (year from Verkaufsdatum) as character(4))
Aber nur vielleicht ;)

mikhal 3. Jun 2005 12:06

Re: SQL-Code für Summe nach Jahr
 
Versuch es mal so:
SQL-Code:
select cast(extract (year from Verkaufsdatum) as character(4)), sum(Menge) from tabelle group by 1
Grüße
Mikhal

BlueStarHH 3. Jun 2005 12:08

Re: SQL-Code für Summe nach Jahr
 
Zitat:

Zitat von mikhal
Versuch es mal so:
SQL-Code:
select cast(extract (year from Verkaufsdatum) as character(4)), sum(Menge) from tabelle group by 1

Exception: "Merkmal nicht verfügbar"

BlueStarHH 3. Jun 2005 12:09

Re: SQL-Code für Summe nach Jahr
 
Zitat:

Zitat von jim_raynor
SQL-Code:
select cast(extract (year from Verkaufsdatum) as character(4)), sum(Menge) from tabelle group by cast(extract (year from Verkaufsdatum) as character(4))

Exception: "Merkmal nicht verfügbar"

joachimd 3. Jun 2005 12:16

Re: SQL-Code für Summe nach Jahr
 
SQL-Code:
select cast(extract (year from Verkaufsdatum) as character(4)) as JAHR, sum(Menge) as Menge from tabelle group by JAHR
?

marabu 3. Jun 2005 12:16

Re: SQL-Code für Summe nach Jahr
 
Zitat:

Zitat von BlueStarHH
Die Menge soll also nach Jahr aufsummiert werden. Wie mache ich das mit SQL?

Mit SQL sicher kein Problem - Paradox unterstützt aber nur einen SQL-Dialekt (local sql) und der lässt nur echte Tabellenfelder in der GROUP BY Klausel zu. Du wirst deine Tabelle um ein Feld Jahr erweitern und dieses Feld mit UPDATE tabelle SET jahr = EXTRACT(YEAR FROM datum) initialisieren müssen, fürchte ich.

Zitat:

Zitat von Borland
Der GROUP-BY-Klausel wird eine Liste mit Spalten übergeben, die jeweils durch ein Komma voneinander getrennt sind. Jede in dieser Liste aufgeführte Spalte muß folgende Kriterien erfüllen:
  • Sie muß sich in einer der Tabellen befinden, die in der FROM-Klausel der Abfrage angegeben wurden.
  • Ebenso muß sie in der SELECT-Klausel der Abfrage aufgeführt sein.
  • Es darf (in der SELECT-Klausel) keine Aggregatfunktion auf sie angewendet werden.

Grüße vom marabu

BlueStarHH 3. Jun 2005 12:25

Re: SQL-Code für Summe nach Jahr
 
Zitat:

Zitat von joachimd
SQL-Code:
select cast(extract (year from Verkaufsdatum) as character(4)) as JAHR, sum(Menge) as Menge from tabelle group by JAHR
?

Exception: "Ungültiger Feldname 'Jahr'"

Danke an alle für die Antworten. Wie von marabu geschrieben, ist mit Paradox da wohl leider nicht viel zu machen, ohne dass man eine neue Spalte "Jahr" einrichtet.

Hansa 3. Jun 2005 12:30

Re: SQL-Code für Summe nach Jahr
 
Warum so kompliziert ? Mit Cast und sonstigem Firlefanz ? Ihr denkt genau verkehrt rum. 8)

SQL-Code:
select sum (Menge) from Tabelle where extract (year from Verkausdatum)=2005
Ob das Paradox hergibt weiß ich allerdings nicht. Bei meiner DB (Firebird 1.5) ging das aber. Zumindest ist kein Extra-Feld für das Jahr notwendig. Man darf auch nur in der Where-Klausel kein SUM usw. benutzen. Extract gehört da aber nicht dazu.

BlueStarHH 3. Jun 2005 12:51

Re: SQL-Code für Summe nach Jahr
 
Zitat:

Zitat von Hansa
Warum so kompliziert ? Mit Cast und sonstigem Firlefanz ? Ihr denkt genau verkehrt rum. 8)

SQL-Code:
select sum (Menge) from Tabelle where extract (year from Verkausdatum)=2005
Ob das Paradox hergibt weiß ich allerdings nicht. Bei meiner DB (Firebird 1.5) ging das aber. Zumindest ist kein Extra-Feld für das Jahr notwendig. Man darf auch nur in der Where-Klausel kein SUM usw. benutzen. Extract gehört da aber nicht dazu.

Das funktioniert zwar mit Paradox, ist aber nicht das was ich haben möchte. Denn es gibt nur die Summe für 2005 zurück. Ich möchte in der Ergebnistabelle aber die Summe für alle Jahre haben, die in der DB sind.

Sharky 3. Jun 2005 15:35

Re: SQL-Code für Summe nach Jahr
 
Zitat:

Zitat von BlueStarHH
... Das funktioniert zwar mit Paradox, ist aber nicht das was ich haben möchte. Denn es gibt nur die Summe für 2005 zurück. Ich möchte in der Ergebnistabelle aber die Summe für alle Jahre haben, die in der DB sind.

Hai BlueStarHH,

kannst Du nicht anstelle von WHERE ein GROUP BY einbauen? Dann solltest Du für jedes Jahr eine Spalte mit der Summe bekommen.

BlueStarHH 3. Jun 2005 15:39

Re: SQL-Code für Summe nach Jahr
 
Zitat:

Zitat von Sharky
kannst Du nicht anstelle von WHERE ein GROUP BY einbauen? Dann solltest Du für jedes Jahr eine Spalte mit der Summe bekommen.

Nein, das geht nicht. Diesen Lösungsvorschlag hatten wir schon weiter oben.

Sharky 3. Jun 2005 15:42

Re: SQL-Code für Summe nach Jahr
 
Zitat:

Zitat von BlueStarHH
... Nein, das geht nicht. Diesen Lösungsvorschlag hatten wir schon weiter oben.

:wall:
Da kaufe ich mir schon eine neue Brille für 400 Euro und kann trotzdem nicht richtig lesen. Entschuldigung :oops:


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