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

Benötige Hilfe bei einer Abfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MysterioJN, 18 November 2019.

  1. MysterioJN

    MysterioJN Datenbank-Guru

    Hallo zusammen,

    ich stehe auf dem Schlauch.

    Basistabellenauszug:
    Jahr, Monat, Artikel, Stück
    2019, 11, A, 125
    2019, 11, A, 20
    2019, 11, A, 5
    2019, 10, A, 30
    2019, 10, A, 25


    Wichtig:
    Oben in der Beispielliste steht nur - der Einfachheit halber - Einzelverkäufe des Artikel A drin.
    Sprich es sind 3 x der Artikel A im Monat 11 abgeflossen = Summe Stück 150 (125 + 20 +5)
    Weitere andere Artikel (B, C, etc.) sind hier nicht beigefügt - in echt aber schon.


    Folgendes Ziel soll sein:
    Ich brauche für den aktuellen Monat / Jahr [ WHERE Monat = MONTH(getdate()) AND Jahr = YEAR(getdate()) ] die besten 5 VERSCHIEDENEN Artikel nach SUMMIERTEN Stück des AKTUELLEN Monats.

    Ich bekomm das irgendwie nicht hin:
    - Zum einen muss ich auf den Artikel gruppieren
    - dann nach Sum(Stück) DESC sortieren und mir nur die höchsten monatsweise summierten Stückzahlen anzeigen. Sprich: " A / 150" ohne die Stück der Vormonate.

    Ich renne von einem Abfragefehler in den anderen. Ist mein Gedankengang falsch?

     
  2. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT TOP 5 t.* FROM ( SELECT Jahr,Monat,Artikel,sum(Stück) AS Stück FROM tabelle WHERE Jahr = year(getdate()) AND Monat = month(getdate()) GROUP BY Jahr,Monat,Artikel ) t ORDER BY t.Stück DESC
    Wäre jetzt eine Möglichkeit und vermutlich die "klassische" Variante weil kaum Besonderheiten im SQL.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    mal ohne dem Datumszeugs:

    Code:
    test=*# SELECT * FROM mysterio ;
     artikel | stueck
    ---------+--------
     A       |     10
     A       |     20
     A       |     30
     B       |     10
     B       |     20
     C       |    100
     D       |      1
     D       |      1
     E       |    500
     E       |    100
    (10 rows)
    test=*# select artikel, sum(stueck) from mysterio group by artikel;
     artikel | sum
    ---------+-----
     B       |  30
     C       | 100
     D       |   2
     E       | 600
     A       |  60
    (5 rows)
    
    test=*# with summen as (select artikel, sum(stueck) from mysterio group by artikel) select artikel, sum, rank() over (order by sum desc) from summen;
     artikel | sum | rank
    ---------+-----+------
     E       | 600 |    1
     C       | 100 |    2
     A       |  60 |    3
     B       |  30 |    4
     D       |   2 |    5
    (5 rows)
    test=*# with summen as (select artikel, sum(stueck) from mysterio group by artikel), rank as ( select artikel, sum, rank() over (order by sum desc) from summen) select * from rank where rank <= 3;
     artikel | sum | rank
    ---------+-----+------
     E       | 600 |    1
     C       | 100 |    2
     A       |  60 |    3
    (3 rows)
    
    
     
  4. akretschmer

    akretschmer Datenbank-Guru

  5. MysterioJN

    MysterioJN Datenbank-Guru

    Ohhh vielen Dank!! Man, so herum es in (From) zu packen habe ich auch noch nicht dran gedacht....

    Dank Euch Beiden !!!
     
  6. ukulele

    ukulele Datenbank-Guru

    Ja rank() bzw. row_number() können sinnvoll sein, vor allem wenn es dann mal mehrere Artikel gleichzeitig werden.
     
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