Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Abfrage group by

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von chrisi303, 28 April 2017.

  1. chrisi303

    chrisi303 Aktiver Benutzer

    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
     
  2. chrisi303

    chrisi303 Aktiver Benutzer

    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"
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  4. chrisi303

    chrisi303 Aktiver Benutzer

    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
     
    akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden