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

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

emeriks
emeriks 03.12.2019 aktualisiert um 12:55:30 Uhr
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 03.12.2019 um 13:10:57 Uhr
Goto Top
So einfach?
Kannste mal sehen. Manchmal sieht man den Wald nicht. Danke! Das werde ich testen face-smile
ukulele-7
ukulele-7 03.12.2019 um 13:22:29 Uhr
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 03.12.2019 um 14:52:31 Uhr
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