aximand
Goto Top

SQL Summieren WENN

Hallo,

ich habe folgendes Problem bei dem ich seit Tagen nicht so recht weiterkomme:

Es gibt beliebig viele Datensätze mit Menge und Mengeneinheit zu einem gemeinsamen Nenner "Rechnugsnummer"

Also:
Produkt, menge, Mengeneinheit, RE-Nummer, Positionspreis
Produkt A, 25, CBM (Kubikmeter), RE0815, 20
Produkt B, 30, CBM, RE0815, 50
Produkt C, 10, QM (Quadratmeter), RE0815, 70
Produkt D, 2, QM, RE0815, 5

Ich möchte jetzt eine Abfrage Gesamtsumme: SUM(Positionspreis) AS Gesamtsumme
als auch Abfrage Gesamtmenge in CBM und QM
Summe CBM, Summe QM, Gesamtsumme Preis:
55 (CBM), 12 (QM), 145

Ich brauche also sowas wie:

SUM(fakturierteMengeCBM) as CBM wehre Mengeneinheit = CMB...


Kann mir da einer helfen?
THX

Content-ID: 521285

Url: https://administrator.de/contentid/521285

Printed on: November 5, 2024 at 04:11 o'clock

emeriks
emeriks Dec 03, 2019 updated at 11:55:30 (UTC)
Goto Top
Hi,
2 SELECTS in einer dritten verschachteln.

SELECT 
  (SELECT SUM([menge]) FROM Tabelle1 WHERE [Mengeneinheit] = 'CBM' AND [RE-Nummer] = 'RE0815' ) AS CBM,   
  (SELECT SUM([menge]) FROM Tabelle1 WHERE [Mengeneinheit] = 'QM' AND [RE-Nummer] = 'RE0815' ) AS QM,  
  (SELECT SUM([Positionspreis]) FROM Tabelle1 WHERE [RE-Nummer] = 'RE0815' ) AS Preis  

E.

Edit: Aktualisiert. Hatte Preis vergessen.
Aximand
Aximand Dec 03, 2019 at 12:10:57 (UTC)
Goto Top
So einfach?
Kannste mal sehen. Manchmal sieht man den Wald nicht. Danke! Das werde ich testen face-smile
ukulele-7
ukulele-7 Dec 03, 2019 at 12:22:29 (UTC)
Goto Top
Ich würde es anders machen:
SELECT
sum(CASE WHEN [Mengeneinheit] = 'CBM' THEN [menge] ELSE NULL END) AS CRM,  
sum(CASE WHEN [Mengeneinheit] = 'QM' THEN [menge] ELSE NULL END) AS QM,  
sum([Positionspreis]) AS Preis
FROM Tabelle1
WHERE [RE-Nummer] = 'RE0815'  
Das sollte den Server weniger belasten, erfordert die Angabe der RE-Nr. nur an einer Stelle und läßt sich besser erweitern, z.B. durch Gruppieren etc.
Dirmhirn
Dirmhirn Dec 03, 2019 at 13:52:31 (UTC)
Goto Top
Hi,

bin nur gerade aus einem anderen Grund über die Funktion gesstolpert. Aber falls du MYSQL nutzt gibt es die Funktion ROLLUP.

Mit Group by erstellt sie dir die Summen für eine ganze Tabelle.

sg Dirm