AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Problem

Ein Thema von manfred_h · begonnen am 12. Mär 2007 · letzter Beitrag vom 13. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#1

SQL Problem

  Alt 12. Mär 2007, 16:24
Datenbank: Firbird • Version: 1.5 • Zugriff über: Fibplus
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.2000AND '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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: SQL Problem

  Alt 12. Mär 2007, 16:30
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.2000AND '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.2000AND '01.01.2008
GROUP BY BIBLE_TYPE, D_DATE
Andreas
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: SQL Problem

  Alt 12. Mär 2007, 16:31
Eine Aggregatfunktion (SUM, MAX usw.) ist nirgends zu sehen. Ins GroupBy gehören alle anderen Felder !
Gruß
Hansa
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: SQL Problem

  Alt 12. Mär 2007, 16:33
Besten Dank Euch

es geht
Shalom
Manfred
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: SQL Problem

  Alt 12. Mär 2007, 16:38
Hallo,

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

Gruß

Ralf
Ralf
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#6

Re: SQL Problem

  Alt 12. Mär 2007, 16:41
Zitat von Neumann:
Hallo,

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

Gruß

Ralf
Hääääää?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: SQL Problem

  Alt 12. Mär 2007, 16:45
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.
Andreas
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: SQL Problem

  Alt 12. Mär 2007, 16:54
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
Ralf
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#9

Re: SQL Problem

  Alt 12. Mär 2007, 17:47
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 GROUP BY 1, 2, 3 möglich sein.

Gruß
Thomas
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: SQL Problem

  Alt 12. Mär 2007, 20:13
So ist es wohl. Habe es nur mit so etwas probiert:

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

Gruß

Ralf
Ralf
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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