AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit stored Procedure und group by
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit stored Procedure und group by

Ein Thema von Hansa · begonnen am 29. Aug 2005 · letzter Beitrag vom 31. Aug 2005
 
shmia

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

Re: Problem mit stored Procedure und group by

  Alt 29. Aug 2005, 13:29
ALSO:
wenn du in einer SQL-Abfrage eine Aggregat-Funktion benützt (SUM, MIN, MAX, COUNT, AVG), dann werden mehrere Zeilen zusammengefasst.
SQL-Code:
SELECT SUM(K.MENGE)
FROM ART A RIGHT JOIN KSTAT K ON (A.ID = K.ID_ART)
WHERE (MONAT >= :VONMONAT) AND (MONAT <= :BISMONAT) AND (JAHR = :JAHR)
Hier sind die Felder MONAT & JAHR nicht eindeutig, da kein Tabellenname angegeben. Daher:
SQL-Code:
SELECT SUM(K.MENGE)
FROM ART A RIGHT JOIN KSTAT K ON (A.ID = K.ID_ART)
WHERE (K.MONAT >= :VONMONAT) AND (K.MONAT <= :BISMONAT) AND (K.JAHR = :JAHR)
Wenn in der Feldliste dann neben der Aggregat-Funktion ein (oder mehrere) "normales" Feld(er) auftaucht, dann muss diese Feld hinter GROUP BY stehen!!
SQL-Code:
SELECT SUM(K.MENGE), A.NR
FROM ART A RIGHT JOIN KSTAT K ON (A.ID = K.ID_ART)
WHERE (K.MONAT >= :VONMONAT) AND (K.MONAT <= :BISMONAT) AND (K.JAHR = :JAHR)
GROUP BY A.NR
Wenn du die Klausel SELECT ..... INTO new_table verwendest, dann gibt die Abfrage kein Ergebnis zurück, sondern die Ergebnismenge wird in eine neue physikalische Tabelle kopiert.

Du kannst auch die Daten mit einer Unterabfrage aufbereiten.
Zuerst die innere SELECT - Abfrage:
SQL-Code:
(SELECT ID_ART, SUM(MENGE) as SUMMENGE FROM KSTAT
WHERE (MONAT >= :VONMONAT) AND (MONAT <= :BISMONAT) AND (JAHR = :JAHR)
GROUP BY ID_ART)
Diese Unterabfrage lässt sich nun mit der Tabelle ART verjoinen:
SQL-Code:
SELECT A.*, DevTbl.SUMMENGE
FROM ART A RIGHT JOIN
   (SELECT ID_ART, SUM(MENGE) as SUMMENGE FROM KSTAT
   WHERE (MONAT >= :VONMONAT) AND (MONAT <= :BISMONAT) AND (JAHR = :JAHR)
   GROUP BY ID_ART) DevTbl
Die Tabelle DevTbl ist der Alias für die Unterabfrage.
Vorteil: du hast Zugriff auf alle Felder der Tabelle ART.
Es gibt also zwei Möglichkeiten:
* zuerst einen JOIN bilden and dann mit GROUP BY verdichten
* zuerst mit GROUP BY verdichten (die Unterabfrage) und dann den JOIN bilden

Ich hoffe, das bringt etwas Licht ins Dunkel
Andreas
  Mit Zitat antworten Zitat
 


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 05:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz