Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.
Seite 1 von 2  1 2      

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