Zeilen addieren wenn Nachbarspalte = X

HRGS85

Benutzer
Beiträge
23
Hallo zusammen,

ich habe folgende SQL Abfrage:

Code:
select
i.sku,
sum(o.base_subtotal) as Nettoumsatz,

join sales_flat_order o on i.order_id = o.entity_id

and
(i.sku = 'G-GE-34'
or i.sku = 'G-GR-34'
or i.sku = 'G-LI-34'
or i.sku = '045418')

group by sku

Ich möchte nun, dass base_subtotal für die ersten beiden skus addiert wird und in einer Zeile ausgegeben wird. Derzeit kriege ich noch für jede der skus eine Zeile. Wie mache ich das wohl?

Besten dank und Grüße
 
Werbung:
Hallo zusammen,

ich habe folgende SQL Abfrage:

Code:
select
i.sku,
sum(o.base_subtotal) as Nettoumsatz,

join sales_flat_order o on i.order_id = o.entity_id

and
(i.sku = 'G-GE-34'
or i.sku = 'G-GR-34'
or i.sku = 'G-LI-34'
or i.sku = '045418')

group by sku

Ich möchte nun, dass base_subtotal für die ersten beiden skus addiert wird und in einer Zeile ausgegeben wird. Derzeit kriege ich noch für jede der skus eine Zeile. Wie mache ich das wohl?

Besten dank und Grüße


Dein Select sieht syntaktisch falsch aus. Und ich habe keinen Bock, aus einem syntaktisch falschen SQL die Struktur Deiner Tabellen zu ermitteln.

Brech das auf ein vereinfachtes, nachvollziehbares Tabellendesin runter, zeige Demodaten und was Du willst und erwartest.
 
So dann zerreißen wir dein Statement doch mal...
Code:
select
i.sku,
sum(o.base_subtotal) as Nettoumsatz,    -- Punkt1: Was macht das Komma da? Kann nicht funktionieren...
-- Punkt 2: Wo ist die From-Clause? Oder auf welche Tabelle bezieht sich der Alias "i"?...
join sales_flat_order o on i.order_id = o.entity_id --Punkt 3: Was für ein Join ist das? Left Join, Right Join, Full Join, Cross Join, Inner Join........ ?
--Punkt 4: Wo ist dein Where ? Das "and" ist da vollkommen deplatziert...
and
(i.sku = 'G-GE-34'
or i.sku = 'G-GR-34'
or i.sku = 'G-LI-34'
or i.sku = '045418')
-- Punkt 5: Nur eine optische Sache, aber dieses OR-Gekröse kann man auch mit einem In abbilden ->  i.sku In ('G-GE-34', 'G-GR-34', 'G-LI-34', '045418')
group by sku --Punkt 6: Alias fehlt... Kann dir ziemlich schnell um die Ohren fliegen...

Also selbst MySQL sollte hier ein paar Syntaxfehler werfen... So schlecht es auch sein mag...
 
Ok hier das korrigierte Skript:

Code:
select
SKU,
sum(base_subtotal) as Nettoumsatz

from sales_flat_order

where SKU In ('G-GE-34', 'G-GR-34' , 'G-LI-34', '045418')

group by SKU

Derzeit werden 2 Spalten (sku und Nettoumsatz) und 4 Zeilen (G-GE-34, etc.) erzeugt. Ich möchte aber die beiden ersten SKUs in einer Zeile zusammenfassen und die Werte für Nettoumsatz addieren. Im Anhang liegt eine Datei die das zeigt.
 

Anhänge

  • SQL Bsp.pdf
    164,7 KB · Aufrufe: 7
Dann bekomme ich nur noch die Gesamtsumme. Ich möchte aber wie in der PDF dargestellt die beiden ersten SKUs zusammenfassen (G-GE-34 und G-GR-34).
 
Aggregiert werden soll der Nettoumsatz.

Dieser soll aggregiert werden für SKU G-LI-34 und G-GR-34 (SKU bedeutet Artikelnummer). Wenn in Spalte SKU also G-LI-34 oder G-GR-34 steht sollen die Umsatzwerte genommen werden und zusammenaddiert werden. Also der Nettoumsatz beider SKUs soll zusammen addiert werden und in eine Zeile geschrieben werden. Derzeit existieren 2 Zeilen für beide SKUs. Ich will aber nicht 2 Zeilen für jede der beiden SKUs sondern nur noch eine Zeile haben, da die beiden SKUs quasi den gleichen Artikel beschreiben.

Die PDF Zeigt es -> aus Zeile 1 und 2 soll eine Zeile gemacht werden. SKU G-LI-34 und G-GR-34 sollen gruppiert werden wenn man so will.

Keine Ahnung wie ich es noch anders beschreiben soll.
 

Anhänge

  • SQL Bsp.pdf
    164,7 KB · Aufrufe: 1
Code:
test=*# select * from hrgs ;
  sku  | umsatz
---------+--------
 G-LI-34 | 392.40
 G-GR-34 | 283.95
 G-GE-34 | 125.21
 045418  |  96.63
(4 rows)

test=*# select 'G...', sum(umsatz) from hrgs where sku in ('G-LI-34','G-GR-34') union all select sku, umsatz from hrgs where sku not in ('G-LI-34','G-GR-34');
 ?column? |  sum
----------+--------
 G...  | 676.35
 G-GE-34  | 125.21
 045418  |  96.63
(3 rows)
 
Ich hätte es ja einfach so gemacht:
Code:
select
max(SKU),
sum(base_subtotal) as Nettoumsatz

from sales_flat_order

where SKU In ('G-GE-34', 'G-GR-34' , 'G-LI-34', '045418')

group by Case SKU When 'G-GE-34' Then '1' When 'G-GR-34' Then '1' Else SKU End
 
Werbung:
Alternativ:
Code:
SELECT   replace(replace(SKU,'G-GR-34','G-GR/LI-34'),'G-LI-34','G-GR/LI-34') AS SKU,
     sum(base_subtotal) AS Nettoumsatz
FROM   sales_flat_order
WHERE   SKU IN ('G-GE-34','G-GR-34' ,'G-LI-34','045418')
GROUP BY replace(replace(SKU,'G-GR-34','G-GR/LI-34'),'G-LI-34','G-GR/LI-34')
 
Zurück
Oben