blu3scr33n
Goto Top

SQL Statement - Select TOP x - Variables Filterkriterium

Hallo liebe Administratoren,

ich baue mir grade eine kleine Access-DB zusammen und bin dabei auf ein Problem gestoßen:

Ich möchte aus einer Tabelle die TOP 20 Einträge mehrerer Kategorien selektieren.
Ich habe einen Parameter, nachdem ich groupen kann, um die Top 20 Einträge herauszufinden. Dieser nennt sich "RPT_im_GJ".
Die Liste enthält zusätzlich eine Spalte mit der Informationen über Kategorie. Diese nennt sich "Sparte".
Den Sparteneintrag ziehe ich mir über einen Join-Befehl aus einer separaten Liste.

Meine Abfrage soll mir jetzt für jeden Eintrag "Sparte" jeweils die Top 20 Einträge von "RPT_im_GJ" ausgeben, sodass ich nach den Sparten filtern kann und mir nur noch die Top 20 Einträge der jeweiligen Sparte angezeigt werden.

Als Beispiel:
Meine Originalliste sieht so aus:
ID RPT_im_GJ Sparte
1 20.000 A
2 25.000 B
3 10.000 A
4 15.000 A
5 30.000 B
6 5.000 B

Meine Abfrage würde folgendes Ergebnis erzeugen (Wen ich nach den Top 2 selektieren würde):

ID RPT_im_GJ Sparte
5 30.000 B
2 25.000 B
1 20.000 A
4 15.000 A

Bisher habe ich das noch nicht geschafft und ich behelfe mir mit einem Workaround, in dem ich per Where-Clause die Sparte auswähle. Das ist allerdings mühsam, da ich ca. 50 Sparten habe und diese Query noch für mehrere Kriterien durchexerzieren müsste.

Ich würde das Problem gerne per SQL und nicht mit VBA lösen.
Gegoogelt habe ich auch schon, bin allerdings nicht zu einem passenden Ergebnis gekommen. Vielleicht liegt es aber auch nur daran, dass ich nach den falschen Schlagworten google.
Ich bitte um eure Hilfe und bin für Tipps und Ratschläge dankbar.

Beste Grüße

Blu3Scr33n

Content-Key: 286267

Url: https://administrator.de/contentid/286267

Printed on: April 19, 2024 at 08:04 o'clock

Member: Safe-Virus
Safe-Virus Oct 21, 2015 at 19:21:55 (UTC)
Goto Top
Guten Abend,

ich weiss es nicht genau wonach Sie gegoogelt haben, doch versuchen Sie nach
"select top records for each group"
zu googeln.

Hier eine interessante Lösung für das Problem:
http://code.openark.org/blog/mysql/sql-selecting-top-n-records-per-grou ...

es sind unterschiedliche Lösungen vorgeschlagen - man muss sich aber entscheiden, welche Lösung man nimmt. So richtig trivial sind sie nicht, jedoch auch keine Wissenschaft.

Ich würde es so lösen wie es hier beschireben ist:
http://stackoverflow.com/questions/16720525/how-to-select-top-3-values- ...

und zwar indem ich die Daten hier anpasse:

SELECT name, value, rn
FROM
( SELECT name, value,
ROW_NUMBER() OVER (PARTITION BY name
ORDER BY value DESC
)
AS rn
FROM t
) tmp
WHERE rn <= 3
ORDER BY name, rn ;

Viel Erfolg!
Member: Blu3Scr33n
Blu3Scr33n Oct 22, 2015 at 13:56:09 (UTC)
Goto Top
Scheinbar existiert die Funktion Row_Number in Access nicht. Ich kriege nämlich ständig die Fehlermeldung: Syntax error (missing operator) in query expression 'xxx'.

Ich habe schon nach einer Lösung gegoogelt und bin fündig geworden. Row_Number Funktion in Access
Allerdings bin ich zu unfähig das Statement in die Abfrage oben reinzubasteln. Kann mir da jemand helfen?
Member: Safe-Virus
Safe-Virus Oct 22, 2015 at 14:19:04 (UTC)
Goto Top
Es wäre echt schön, wenn Sie Ihr SQL Statement hier mitposten würden...
Member: TheJoker2305
TheJoker2305 Jul 01, 2019 at 12:44:22 (UTC)
Goto Top
Hallo,

Access kann kein "Row_Number" face-smile

BTW das aktuelle SQL wäre wirklich hilfreich.

Greetz
thejoker2305