Problem mit Abfrage

25/09/2009 - 15:59 von Gerold Mittelstädt | Report spam
Hallo,

folgendes Problem: Es soll die Gesamtsumme über verschiedene Felder und
Tabellen gebildet werden.
Fast funktionierender Ansatz ist:


SELECT SUM(CASE WHEN Menge*Einzelpreis+OptionsPreis <= Gegeben
THEN Menge*Einzelpreis+OptionsPreis
ELSE Gegeben
END
) + (SELECT SUM(Betrag) FROM Zahlung) As TestResult

FROM dbo.InvoiceItem INNER JOIN
dbo.PaymentBar ON dbo.InvoiceItem.InvoiceID = dbo.PaymentBar.ID LEFT OUTER JOIN
dbo.InvoiceItemOptions ON dbo.InvoiceItem.ID = dbo.InvoiceItemOptions.InvoiceItemID



Das Problem ist jetzt nur: Einem InvoiceItem können mehrere (oder auch
keine) Optionen zugeordnet sein. Sogesehen beschert mir LEFT OUTER JOIN
für eben solche InvoiceItems mehrere Zeilen, und Menge*Einzelpreis eines
Postens wird mehrfach addiert.

Gibt es eine Möglichkeit die OptonsPreise vorzugruppieren und dann nur
die so erhaltene Summe aller OptionsPreise für einen Posten für die
Hauptabfrage zu verwenden?

Viele Grüße!
 

Lesen sie die antworten

#1 Dieter Strassner
27/09/2009 - 16:12 | Warnen spam
Hallo Gerold,

folgendes Problem: Es soll die Gesamtsumme über verschiedene Felder
und Tabellen gebildet werden.
Fast funktionierender Ansatz ist:

SELECT SUM(CASE WHEN Menge*Einzelpreis+OptionsPreis <= Gegeben
THEN Menge*Einzelpreis+OptionsPreis
ELSE Gegeben
END
) + (SELECT SUM(Betrag) FROM Zahlung) As TestResult

FROM dbo.InvoiceItem INNER JOIN
dbo.PaymentBar ON dbo.InvoiceItem.InvoiceID >> dbo.PaymentBar.ID LEFT OUTER JOIN
dbo.InvoiceItemOptions ON dbo.InvoiceItem.ID >> dbo.InvoiceItemOptions.InvoiceItemID



Das Problem ist jetzt nur: Einem InvoiceItem können mehrere (oder auch
keine) Optionen zugeordnet sein. Sogesehen beschert mir LEFT OUTER
JOIN für eben solche InvoiceItems mehrere Zeilen, und
Menge*Einzelpreis eines Postens wird mehrfach addiert.

Gibt es eine Möglichkeit die OptonsPreise vorzugruppieren und dann nur
die so erhaltene Summe aller OptionsPreise für einen Posten für die
Hauptabfrage zu verwenden?



In den SELECT sum(... ein Unterselect einbauen das Dir die gewünschte Summe
bringt. Das Ergbnis mit IsNull(..,0) klammern, damit mit der aus der leeren
Menge entstehenden NULL-Werte weiter gerechnet werden kann.


Viele Grüße

Dieter


Rückfragen bitte nur in die Newsgroup!

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz

Ähnliche fragen