Abfrage group by

chrisi303

Aktiver Benutzer
Beiträge
32
Hallo ich komme nicht wirklich weiter und bräuchte mal einen Ansatz.

Ich habe eine Abfrage die mir die top verkauften Artikel in einer Zeitspanne ausgibt. Jetzt brauche ich noch eine Abfrage die die Artikel in Serien gruppiert und mir den Umsatz der Serien ausgibt.

mit group komme ich nicht weiter.

Mit folgender Abfrage bekomme ich die top verkauften Artikel der letzten 90 Tage.


Code:
select top 100 art.kArtikel, art.cArtNr, name.cname, art.kWarengruppe, name.kSprache,
    ( select sum( nAnzahl)
        from dbo.tbestellpos
        join dbo.tBestellung
        on dbo.tBestellung.kBestellung = dbo.tbestellpos.tBestellung_kBestellung
        where dbo.tbestellpos.tArtikel_kArtikel =art.kArtikel
        and dbo.tBestellung.dErstellt >= DATEADD(day, -90, getdate())) as Verkauf, art.cAktiv, ROUND(art.fVKNetto, 2) as 'VK(Netto)', ROUND(art.fEKNetto,2) as 'EK(Netto)' , art.cserie
    from dbo.tArtikel art
    join dbo.tArtikelBeschreibung name
    on name.kArtikel = art.kArtikel

    and art.cArtNr not like 'muster%'
    and name.kSprache = 1
    order by Verkauf DESC



tArtikel = Artikeldaten (auch Serie)

tArtikelBeschreibung (brauch nur die für den Deutschenmarkt)

tbestellpos alle bestellten Positionen

tBestellung alle Bestellungen benötige ich nur für die Zeit Begrenzung
 
Werbung:
so wäre es vereinfacht ohne zeit und sprache.
Code:
select sum(pos.nAnzahl)as summe, pos.tArtikel_kArtikel, art.cSerie
from dbo.tbestellpos pos
join dbo.tArtikel art
on pos.tArtikel_kArtikel = art.kArtikel
group by pos.tArtikel_kArtikel, art.cSerie


Code:
"14"    "12143"    "White & Cream"
"34,56"    "12145"    "White & Cream"
"35,64"    "12146"    "White & Cream"
"10,8"    "12147"    "White & Cream"
"10,8"    "12148"    "White & Cream"
"2,16"    "12151"    "White & Cream"
"14,58"    "12155"    "White & Cream"
"1"    "12205"    "White & Cream"
"1"    "12211"    "White & Cream"
"1"    "12212"    "White & Cream"
"1"    "19889"    "White & Cream"
"28,8"    "8361"    "Wooden"
"210"    "8362"    "Wooden"
"4,05"    "8365"    "Wooden"
"26"    "8369"    "Wooden"
"6,48"    "8374"    "Wooden"
"80,19"    "8375"    "Wooden"
"20,16"    "8381"    "Wooden"
"20"    "8389"    "Wooden"
"72"    "8392"    "Wooden"
"18,0000007152557"    "8402"    "Wooden"
"1"    "8725"    "Wooden"
"2736,96"    "13682"    "Woodland"
"709,44"    "13683"    "Woodland"
"1402,92"    "13684"    "Woodland"
"75,84"    "13685"    "Woodland"

die ausgabe sollte dann irgenwie so ausehen
"127,57" "12145" "White & Cream"
"486,68" "8361" "Wooden"
"4925,15" "13683" "Woodland"
 
Eventuell bist Du auf der Suche nach Window-Funktionen (z.B. sum(umsatz) over (partition by ...)), aber das ist nur eine Mutmaßung. Es ist schwer, aus aus "die ausgabe sollte dann irgenwie so ausehen" zu erraten, was Du wirklich willst. Zumal Du z.B. "sum(pos.nAnzahl)as summe" berechnest - dem Spaltennamen nach also eine Anzahl, aber in den Daten da Werte mit Komma stehen und auch die Summe der einzelnen Werte nicht dem entspricht, was als Ergebniss kommt (2736.96+709.44+1402.92+75.84=4925.16, nicht "4925,15". Noch schwerer zu erraten ist, was in der zweiten Spalte passieren soll.
 
Werbung:
Soory für die unpräzise angaben. Er sollte alles Verkaufsmegen einer Serie in einem Zeitraum berechnen und ausgeben.
Habe es aber gelöste hatte nur den falschen Ansatz.
so funktioniert es
Code:
select top 100 art.cSerie, ROUND(sum(pos.nAnzahl ),2) as summe
from dbo.tbestellpos pos
join dbo.tArtikel art
on pos.tArtikel_kArtikel = art.kArtikel
where tBestellung_kBestellung in (  select kBestellung from dbo.tBestellung where ctype = 'B'   and dbo.tBestellung.dErstellt >= DATEADD(day, -90, getdate()))
group by art.cSerie
order by summe DESC
 
Zurück
Oben