Bonjour,
En cherchant à résoudre le pb suivant :
soit une table T composée de 100 enregistrements de 2 familles : 75 de la famille A suivis de 25 de la famille B.
Je souhaite par une requête sélection afficher les 6 premiers enre. de la table qui sont de famille A (autrement dit les lignes 1 à 6) et les 10 premiers enre. qui sont de la famille B (autrement dit les lignes 76 à 85)
j’ai abouti grâce aux participants du forum à la solution suivante :
1) Créer une fonction
2) Créer la requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Function garde(famille As String, nb As Long) As Boolean Static fam As String Static compteur As Long If fam = famille Then compteur = compteur + 1 Else fam = famille compteur = 1 End If garde = compteur <= nb End Function
où ma table est T (famille, enre) et mes nombres de lignes à afficher (6 et 10) sont dans ma table de paramètre P(famille, nb)
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT T.famille, T.enre FROM T INNER JOIN P ON T.famille = P.famille WHERE garde([T].[famille],[nb])=True ORDER BY T.famille, T.enre;
Cette solution marche bien lorsque les enregistrements à sélectionner sont dans une table.
Par contre s’ils proviennent d’une requête R, j’ai beau faire en sorte de trier comme je le souhaite la requête (par famille croissante, puis selon d’autres critères propres aux enre.), la fonctionnalité de sélection avec « garde » ne donne pas le résultat souhaité dans la mesure où elle ignore en quelque sorte les critères de tri appliqués à la requête et au contraire s’applique aux enregistrements « non triés », ie avec l’ordre originel qu’ils ont hérité des tables ou requêtes qui ont servi à produire R.
Au final les lignes affichées ne sont pas les bonnes si on se réfère à l’affichage de R.
Sachant que je comptais utiliser massivement cette fonction garde, et que je souhaite autant que faire se peut éviter de créer des tables temporaires, quelqu’un a-t-il une idée pour rendre la fonction « garde » effective également sur les requêtes ?
Par avance merci
Partager