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:
Meine Abfrage würde folgendes Ergebnis erzeugen (Wen ich nach den Top 2 selektieren würde):
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 286267
Url: https://administrator.de/contentid/286267
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
4 Kommentare
Neuester Kommentar
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!
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!