-
SQL - case mit mehreren Summenbildung
Hallo zusammen,
ich hoffe hier jemand zu finden der mir beantworten kann, ob dass was ich vorhabe funktioniert und wenn ja wo mein Fehler liegt.
Ich möchte innerhalb einer CASE-Anweisung mehrere Summen Ausgaben.
Folgendes SQL-Statement funktioniert problemlos
Code:
SELECT sum(case when Rabatt <> 0,00 then (Menge * Einkaufspreis) else 0,00 end) FROM Tabelle
jetzt möchte ich auf gleicher Weise auch den Verkaufspreis errechnen, aber nicht jedesmal die CASE-Anweisung wiederholen.
Daher denke ich der Code könnte wie folgt aussehen (der nicht funktioniert). Kann mir jemand sagen wo mein Fehler liegt.
Code:
SELECT sum(case when Rabatt <> 0,00 then (Menge * Einkaufspreis), (Menge * Verkaufspreis) else 0,00, 0,00 end ) FROM Tabelle
Vielen Dank im Voraus
-
Sowohl die Funktion SUM als auch die CASE Anweisung, können nur 1 Spalte zurückliefern.
Du könntest das ganze in 2 Subselects machen und die dann zusammenfügen.
Das könnte dann wie folgt aussehen.
Code:
with x as (
Select sp1, sp2, (Menge * Einkaufspreis) ME_EP, (Menge * Verkaufspreis) ME_VP from tab1
where Rabatt <> 0,00
),
x2 as (
select sp1, sp2, 0,00 , 0,00 from tab1
where Rabatt = 0
)
select * from x
union
select * from x2
lg Andreas
-
Hallo und Danke für die schnelle Antwort.
So wie geschrieben funktioniert es, aber leider hilft es mir nicht wirklich weiter.
Ich versuche mein Problem neu zu formulieren.
Ich habe eine größere "Grund" WHERE-Bedingung, möchte diese aber nicht bei jedem nachfolgenden Statement wiederholen (bzw. wenn Änderungen anstehen nicht an mehreren Punkten nacharbeiten).
Jetzt möchte ich ( in meinen Beispiel durch den Rabatt) herausfinden wie hoch der Einkaufs- und Verkaufswert mit gewährten Rabatt ist und wie hoch der Einkaufs- und Verkaufswert ist bei dem kein Rabatt gewährt wurde ( Ich weiß mein in meinen ersten Beispiel war das nicht ersichtlich).
Entscheidend wäre also für mich, wie ich mehrere Summen ermitteln kann ohne das ich die WHERE Bedingung mehrfach angeben muss und nur eine die eine ( evtl. auch zwei ) Feldabfragen die Summenbildung ausmachen.
Anbei das Statement was die Logik zeigen soll, aber leider nicht funktioniert.
Code:
SELECT sum(case when Rabatt <> 0,00 then (Menge * Einkaufspreis), (Menge * Verkaufspreis) else (Menge * Einkaufspreis), (Menge * Verkaufspreis) end ) FROM Tabelle
WHERE
Parameter = 1 and
Parameter2 = 2 and
Parameter3 = 3
-
Dafür ist am Besten eine CTE oder eine Derived Table.
In der CTE definierst du Feldnamen und Ergebnisse, im anschließenden Select beziehst du dich darauf:
with mytemptable as (
select f1, f2, f3, f4*f5 as fcalc
from mytable
where ...
)
select * from mytemptable
where fcalc = ....
CTE's kann man mehrere definieren, miteinander verjoinen, mit und ohne grouping usw. usw.
-
Wenn Du 4 Spalten haben möchtest, brauchst Du auch 4 Case Anweisungen.
Ansonsten ist die Frage-Stellung wirklich nicht klar.
Kannst Du vielleicht ein Beispiel für die "komplexe" WHERE-Bedingung angeben?
Ich bekomme das nämlich nicht mit der CASE-Anweisung unter einen Hut.
Birgitta
-
Hallo nochmal
Im Endeffekt ist die folgende Aussage die, die meine Frage beantwortet.
"Wenn Du 4 Spalten haben möchtest, brauchst Du auch 4 Case Anweisungen."
Vielen Dank für die Hilfe
-
Nun ja, du hattest auch die Frage gestellt, wie du die Wiederholung der Ausdrücke im Where verhindern kannst.
Übrigens könntest du auch einen Left join mit der Datei machen und den Join eingrenzen:
select sum(b.wert1 * preis), sum(b.wert2 * preis) ...
from mytable a
left join mytable b on a.key = b.key and b.rabatt <> 0
Durch den Left join erhältst du eben NULL wenn Rabatt = 0 und in der Formel ist das Ergebnis NULL wenn ein Operand = NULL.
Similar Threads
-
By DKSPROFI in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 03-01-19, 14:05
-
By Holzwurm1973 in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 27-09-17, 14:49
-
By mojo in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 27-05-15, 11:01
-
By fpxx in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 19-05-15, 11:42
-
By mk in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 29-08-14, 09:24
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks