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 Problem (https://www.delphipraxis.net/88253-sql-problem.html)

manfred_h 12. Mär 2007 16:24

Datenbank: Firbird • Version: 1.5 • Zugriff über: Fibplus

SQL Problem
 
Hallo zusammen

SQL-Code:
SELECT D_DATE, BIBLE_TYPE, AMOUNT
FROM NURSING_H_DD
   INNER JOIN NURSING_H_D ON (NURSING_H_DD.ID_D = NURSING_H_D.ID)
WHERE D_DATE BETWEEN '01.01.2000' AND '01.01.2008'
GROUP BY BIBLE_TYPE
kann mir jemand sagen wieso GROUP BY BIBLE_TYPE nicht geht?

erhalte immer folgende Fehlermeldung:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).


Danke für Eure Tips
Shalom
Manfred

shmia 12. Mär 2007 16:30

Re: SQL Problem
 
Beim Aufsummieren über GROUP BY darf man nur Aggregat-Funktionen wie SUM(), COUNT, AVRG() oder MAX() verwenden.
Hier eine fehlerfreie Abfrage:
SQL-Code:
SELECT BIBLE_TYPE, SUM(AMOUNT) AS SumAMOUNT
FROM NURSING_H_DD
   INNER JOIN NURSING_H_D ON (NURSING_H_DD.ID_D = NURSING_H_D.ID)
WHERE D_DATE BETWEEN '01.01.2000' AND '01.01.2008'
GROUP BY BIBLE_TYPE
Das Datumsfeld habe ich entfernt, da beim Aufsummieren das Datum zwangsläufig entfallen muss.
Wenn das Datum trotzdem erscheinen soll, dann sieht es so aus:
SQL-Code:
SELECT BIBLE_TYPE, D_DATE, SUM(AMOUNT) AS SumAMOUNT
FROM NURSING_H_DD
   INNER JOIN NURSING_H_D ON (NURSING_H_DD.ID_D = NURSING_H_D.ID)
WHERE D_DATE BETWEEN '01.01.2000' AND '01.01.2008'
GROUP BY BIBLE_TYPE, D_DATE

Hansa 12. Mär 2007 16:31

Re: SQL Problem
 
Eine Aggregatfunktion (SUM, MAX usw.) ist nirgends zu sehen. Ins GroupBy gehören alle anderen Felder !

manfred_h 12. Mär 2007 16:33

Re: SQL Problem
 
Besten Dank Euch :cheers:

es geht
Shalom
Manfred

Neumann 12. Mär 2007 16:38

Re: SQL Problem
 
Hallo,

wie ich das so sehe, sollte man hier einfach GROUP BY 1 nehmen.

Gruß

Ralf

bttb930 12. Mär 2007 16:41

Re: SQL Problem
 
Zitat:

Zitat von Neumann
Hallo,

wie ich das so sehe, sollte man hier einfach GROUP BY 1 nehmen.

Gruß

Ralf

Hääääää?

shmia 12. Mär 2007 16:45

Re: SQL Problem
 
Zitat:

Zitat von Neumann
wie ich das so sehe, sollte man hier einfach GROUP BY 1 nehmen.

Du verwechselst das mit ORDER BY. Dort ist anstelle eines Feldnamens auch der Indexs in der Feldliste erlaubt.
Möglich, dass manche DBMS das auch auf GROUP BY ausdehnen aber das wäre nicht Standard.

Neumann 12. Mär 2007 16:54

Re: SQL Problem
 
Hallo,

hab es tatsächlich mit ORDER BY verwechselt, aber es funktioniert zumindest mit Firebird tatsächlich (habe es eben mit IBExpert auf die Schnelle getestet).

Auch so lernt man dazu.

Gruß

Ralf

TBx 12. Mär 2007 17:47

Re: SQL Problem
 
Zitat:

Zitat von Neumann
hab es tatsächlich mit ORDER BY verwechselt, aber es funktioniert zumindest mit Firebird tatsächlich

aber dennoch müssen alle Felder des select, die nicht aus einer Aggregatfunction gewonnen werden weiterhin angegeben werden.
Sonst macht das Ganze keinen Sinn, woher soll das DBMS sonst wissen, was es herausfiltern soll?

Ich habs jetzt nicht ausprobiert, aber ich denke bei dem angegebenen SQL könnte ein
SQL-Code:
GROUP BY 1, 2, 3
möglich sein.

Gruß
Thomas

Neumann 12. Mär 2007 20:13

Re: SQL Problem
 
So ist es wohl. Habe es nur mit so etwas probiert:

select avg(preis), gruppe from verkaufsartikel group by 2

Gruß

Ralf


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