SUM Gruppierung wieder verwenden

wuffli

Benutzer
Beiträge
15
Hi :)

Gibt es eine Möglichkeit ein Ergebnis aus einer sum in einem case wieder zu verwenden?

Also die Summe aller verkauften Artikel Summe wär dann sowas wie:
Code:
sum(menge) as verkauft

das Ergebnis aus der Spalte "verkauft" möchte ich nun in einem Case wieder verwenden, geht das?
 
Werbung:
Hui danke für die schnelle Antwort. :)

Nein ich glaube nicht das ich das mein, wenn ich HAVING richtig verstehe dann gruppiert und summiert es mir zahlen die ein gewisses Kriterium aufweisen. Ich möchte aber das er mir die anderen Tabellen dann nicht löscht oder gruppiert sondern nur wenn in der Spalte ein >0 ist er mir die sum ausführt.
 
Du kannst sum() und CASE beliebig schachteln, wenn ich das richtig verstehe suchst du:
sum( CASE WHEN verkauft = 1 THEN erlös ELSE 0 END )
Bin mir aber auch nicht sicher ob du das meinst.
 
Gehen wir mal davon aus wir haben 3 Artikel welche im Zeitraum KW1 angeschaut werden:

Artikel ¦ Verkauft¦ Kurzwoche
Art1 ¦ 1 ¦ KW1
Art1 ¦ 1 ¦ KW1
Art1 ¦ 1 ¦ KW1
Art2 ¦ 1 ¦ KW1
Art2 ¦ 1 ¦ KW1
Art3 ¦ 1 ¦ KW1

Jetzt summier ich alle in der KW1 also: sum(case when Kurzwoche = KW1 then verkauft else 0 end)

Gibt dann sowas:

Artikel ¦ Verkauft¦ Kurzwoche
Art1 ¦ 3 ¦ KW1
Art2 ¦ 2 ¦ KW1
Art3 ¦ 1 ¦ KW1

Jetzt möcht ich auf die berechnte Spalte Verkauft zugreifen und da kenn ich keine Möglichkeit. also wenn ich wieder einen case möchte bei dem nur das Ergebnis verkauft >2 angeschaut wird.
 
Code:
test=*# select * from wuffi ;
 artikel | verkauft | kw
---------+----------+-----
 art1  |  1 | kw1
 art1  |  1 | kw1
 art1  |  1 | kw1
 art2  |  1 | kw1
 art2  |  1 | kw1
 art3  |  1 | kw1
(6 rows)

test=*# select artikel, sum(verkauft) as anzahl, kw from wuffi where kw = 'kw1' group by artikel, kw having sum(verkauft) >= 2;
 artikel | anzahl | kw
---------+--------+-----
 art1  |  3 | kw1
 art2  |  2 | kw1
(2 rows)
 
Da ist das having wieder. ;)
Nur ist meine Tabelle natürlich viel ausgeprägter und scheint dort nicht mehr zu funktionieren weil ich die anderen 0 auch aufgelistet haben muss, einfach ohne Ergebnis. Die Auswertung ist für einen Hersteller der meinen Lagerbestand und meine abverkauften Artikel pro KW möchte. Ich schaff aber nur das eine oder das andere.

Wenn ich aber auf das summenergebnis einen case fall beziehen könnte wäre das Problem gelöst. Scheint es aber demnach nicht zu geben?

Edit: Oder gibt es ein case im case Szenario?
 
Zuletzt bearbeitet:
Sowas?

Code:
test=*# select * from wuffi ;
 artikel | verkauft | kw
---------+----------+-----
 art1  |  1 | kw1
 art1  |  1 | kw1
 art1  |  1 | kw1
 art2  |  1 | kw1
 art2  |  1 | kw1
 art3  |  1 | kw1
 art2  |  2 | kw2
 art1  |  1 | kw2
(8 rows)

test=*# select artikel, sum(case when kw='kw1' then 1 else 0 end) as "in kw1", sum(case when kw != 'kw1' then 1 else 0 end) as "not in kw1"  from wuffigroup by artikel;
 artikel | in kw1 | not in kw1
---------+--------+------------
 art2  |  2 |  1
 art1  |  3 |  1
 art3  |  1 |  0
(3 rows)
 
Das war natürlich Quark, weil es nur die Anzahl der Ereignisse anzeigt, nicht aber die Summer der verkauften Stückzahlen:

Code:
test=*# select artikel, sum(case when kw='kw1' then verkauft else 0 end) as "in kw1", sum(case when kw != 'kw1' then verkauft else 0 end) as "not in kw1"  from wuffi group by artikel;
 artikel | in kw1 | not in kw1
---------+--------+------------
 art2  |  2 |  2
 art1  |  3 |  1
 art3  |  1 |  0
(3 rows)
 
Du kannst auch mehrere Selects verschachteln und eventuell so sinnvoller weiter rechnen:
Code:
SELECT    t.*
FROM    (

SELECT    sum(case when Kurzwoche = KW1 then verkauft else 0 end) AS spalte
FROM    tabelle

        ) t
WHERE    t.spalte > 2
...und hier dann wieder CASE, GROUP BY oder auch HAVING verwenden.
 
Also was ich bisher habe:

Code:
select
case when j.rdatum between '2016-01-10' and '2016-01-17' then sum(jp.MENGE) else 0 end as verkauft

das Problem hierbei ist das er mir alle jp.menge zusammenrechnet die in der Datenbank vorhanden sind sofern das Datumskriterium bei einem Artikel stimmt. So erhalte ich trotz der Datumseingrenzung falsche Ergebnisse. Wenn ich aber nach der "sum(jp.menge)" wieder ein "case between" machen könnte wäre das Problem gelöst.

Das von Ukulele sieht theoretisch für mich gut und verständlich aus, ich kann es aber praktisch nicht in meine Tabelle integrieren da mir wohl doch das know how dazu fehlt. Wenn ich bei from verschiedene Joins habe wie in meinem Beispiel, funktioniert das dann auch? Das eigentliche "from" ist das erste (?) also müsste das zweite "select" nach der ersten "from" spalte kommen dort ebenfalls wieder mit den joins arbeiten? :confused: Ich hoffe das ist so verständlich. :)
 
Dein Code ergibt auch keinen Sinn, das sum() müsste höchst warscheinlich außerhalb der CASE Anweisung stehen. Liefert dir
Code:
sum(case when j.rdatum between '2016-01-10' and '2016-01-17' then jp.MENGE else 0 end) as verkauft
nicht das richtige Ergebnis?
 
Ehm.... doch :D
Da hab ich wohl einen ziemlich peinlichen Überlegungsfehler drin gehabt der mir jetzt doch ziemlich viel Zeit und Nerven gekostet hat. Vielen Dank für deine Hilfe!
 
Werbung:
Ich nochmal:

Wenn ich jetzt diesen code habe:
Code:
select
sum(case when j.rdatum between '2016-01-10' and '2016-01-17' then jp.MENGE else 0 end ) as verkauft,
A.Menge_Akt as Lager

from Tabelle

Where
a.MENGE_AKT or verkauft > 0
order by verkauft

Kann ich irgendwie auf das Ergebnis was mir der select verkauft ausgibt zugreifen?
Bei Order by funktioniert dies ja, also habe ich das Gefühl das es auch dort funktionieren müsste aber unter Umständen ein eigener Befehl dafür benötigt wird?
 
Zurück
Oben