IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Sélection simultanée des x1, x2, …xn premiers résultats d’une requête


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Sélection simultanée des x1, x2, …xn premiers résultats d’une requête
    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
    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
    2) Créer la requête :
    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;
    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)

    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

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Ici une piste

  3. #3
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Heureux-oli
    Ici une piste
    merci, mais j'avais déjà vu cette section.

    En l'occurrence ça ne m'a pas aidé. TOP ne marche "en série" (ie utilisé tel quel dans une requête) qu'avec un argument fixe; par ailleurs dans l'exemple montré on parle de table alors que mon problème est justement de le faire avec une requête

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Rien ne t'empêche d'utiliser la requête pour en faire une autre pour remplir la table.

  5. #5
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Heureux-oli
    Rien ne t'empêche d'utiliser la requête pour en faire une autre pour remplir la table.
    ouaip

    c'est la solution de repli que j'avais trouvée. Mais ça va impliquer dans mon cas précis beaucoup de remplissages/vidages de tables (car processus voué à être quotidien) et aussi beaucoup de tables intermédaires.

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je ne sais pas ce que tu cherche exactement et dans quel but, mais il reste la piste du DAO

    DAO

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/07/2012, 09h06
  2. Réponses: 10
    Dernier message: 24/11/2010, 12h05
  3. [AC-2003] enlever des 0 dans un champ de résultat d´une requête
    Par benPSA dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/10/2009, 13h08
  4. Réponses: 8
    Dernier message: 18/04/2008, 17h40
  5. récupérer le résultat d’une requête CMD
    Par horkets dans le forum VB.NET
    Réponses: 4
    Dernier message: 28/08/2007, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo