Richtig rechnen und gruppieren mit interbase

cugar

Grünschnabel
Benutze: Delphi 2006 prof. + InterBase 7.5

Hi, stehe gerade auf dem Schlauch^^

Tabelle "SNACK_HAUPT"
mit Spalten: SNH_ID, SNH_GELD, SNH_AUSGEZAHLT
Inhalt:
SNH_ID=1 SNH_GELD=37 SNH_AUSGEZAHLT=3,7
SNH_ID=2 SNH_GELD=14 SNH_AUSGEZAHLT=1,4

Tabelle "SNACKVERKAUF "
mit Spalten: SNV_ID, SNACKHAUPT_ID, SNV_MENGE
Inhalt:
SNV_ID=1 SNACKHAUPT_ID=1 SNV_MENGE=37
SNV_ID=2 SNACKHAUPT_ID=2 SNV_MENGE=5
SNV_ID=3 SNACKHAUPT_ID=2 SNV_MENGE=8
SNV_ID=4 SNACKHAUPT_ID=2 SNV_MENGE=1

Meine Versuchsanweisung:

SELECT
SUM(H.SNH_GELD) as GeldTotal, SUM(H.SNH_AUSGEZAHLT) as ProvisionTotal, SUM(V.SNV_MENGE) as DosenTotal

FROM SNACK_HAUPT H
LEFT JOIN SNACKVERKAUF V ON (H.SNH_ID = V.SNV_SNACKHAUPT_ID)

Sollte sowas als Ergebn. kommen:
GeldTotal =51
ProvisionTotal =5,1
DosenTotal =51

ist aber:
GeldTotal =79
ProvisionTotal =7,9
DosenTotal =51

Mir ist klar wie InterBase auf diese werte kommt, SNACKVERKAUF beinhaltet 3 Datensätze mit gleichem SNV_ID=2. Hab da LEFT Join weil es durch aus sein kann, das keine Dosen aufgefüllt wurden.
Wie müsste ich das ganze jetzt gruppieren damit das ganze stimmt****



Viele Grüsse
Andreas
 
Hallo Andreas,

du hast Recht, das du die 3 Datensätze mit gleichem SNV_ID=2 erst gruppieren musst.

Versuchs mal so:
SQL:
SELECT	SUM(H.SNH_GELD) AS GeldTotal, 
	SUM(H.SNH_AUSGEZAHLT) AS ProvisionTotal, 
	SUM(V.DosenTotal) AS DosenTotal
FROM	SNACK_HAUPT AS H 
LEFT OUTER JOIN
	(SELECT SNV_SNACKHAUPT_ID, 
		SUM(SNV_MENGE) AS DosenTotal
		FROM SNACKVERKAUF
		GROUP BY SNV_SNACKHAUPT_ID
	) AS V 
ON H.SNH_ID = V.SNV_SNACKHAUPT_ID
 
Hi, danke für die schnelle Antwort, dachte schon an Unterabfragen^^
Habs ausprobiert, Interbase gibt eine Fehlermeldung aus, zuerst bei: "FROM SNACK_HAUPT AS H" muss "AS" weg und danach kommt die nächste mit Token unknow Select, in der Zeile hinter "LEFT OUTER JOIN". Glaub diese Unterabfragen gehen hier nur in "where" Anweisung.

Bin weiter fleißig am suchen und probieren.
 
Hallo Andreas,

ich hab hier MSSQL, kann sein das es bei Interbase nicht mit dem "AS" funktioniert.
In meinem SQL war 2x ein "AS". Habs mal rausgenommen.

Probier vorher mal nur den SubSelect:
SQL:
SELECT SNV_SNACKHAUPT_ID, 
        SUM(SNV_MENGE) AS DosenTotal
        FROM SNACKVERKAUF
        GROUP BY SNV_SNACKHAUPT_ID
ob der so funktioniert.
Und hier nochmal der korrigierte SQL, ggf. musst du den Subselect ersetzten, wenn der SQL oben noch Probelme macht.
SQL:
SELECT  SUM(H.SNH_GELD) AS GeldTotal, 
    SUM(H.SNH_AUSGEZAHLT) AS ProvisionTotal, 
    SUM(V.DosenTotal) AS DosenTotal
FROM    SNACK_HAUPT H 
LEFT OUTER JOIN
    (SELECT SNV_SNACKHAUPT_ID, 
        SUM(SNV_MENGE) AS DosenTotal
        FROM SNACKVERKAUF
        GROUP BY SNV_SNACKHAUPT_ID
    ) V 
ON H.SNH_ID = V.SNV_SNACKHAUPT_ID
 
Zurück