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

Access Discussion :

Problèmes avec Requêtes d'extraction 2


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Problèmes avec Requêtes d'extraction 2
    Bonjour,

    J'ai positionné un peu trop vite le tag RESOLU à ma dernière discussion (consultable sur http://www.developpez.net/forums/sho...93#post1019093)
    En effet, mon "cas d'école" ne tenait pas compte des Ex-aequo !!!
    Aussi, me permettrais-je de reformuler ici mon PB:

    J'ai une table qui contient les résultats de 3 épreuves,
    ainsi que le nom et le dossard d'une équipe participante

    table SOURCE
    CO CAP VTT NOM DOSSARD
    12 25 12 A 14
    14 58 40 B 18
    15 87 18 C 02
    15 45 13 D 22
    15 42 75 E 03
    11 44 88 F 12
    22 18 90 G 15

    Le but du jeu est de réaliser les requêtes de classement :
    * Totale avec :
    - 1 colonne donnant le classement
    - les 5 colonnes de la table SOURCE
    - 1 colonne donnant la somme (ou cumul) des 3 valeurs

    cl CO CAP VTT NOM DOSSARD Total
    1 12 25 12 A 14 49
    2 15 45 13 D 22 73
    3 14 58 40 B 18 112
    4 15 87 18 C 02 120
    5 22 18 91 G 15 131
    6 15 42 75 E 03 132
    7 11 44 88 F 12 143


    * par discipline
    - 1 colonne donnant le classement
    - la colonne se référant à la discipline triée croissant
    - la colonne NOM
    - la colonne DOSSARD

    cl CO NOM DOSSARD
    1 11 F 12
    2 12 A 14
    3 14 B 18
    4 15 C 02
    4 15 D 22
    4 15 E 03
    5 22 G 15

    cl CAP NOM DOSSARD
    1 18 G 15
    2 25 A 14
    3 42 E 03
    4 44 F 12
    5 45 D 22
    6 58 B 18
    7 87 C 02

    cl VTT NOM DOSSARD
    1 12 A 14
    2 13 D 22
    3 18 C 02
    4 40 B 18
    5 75 E 03
    6 88 F 12
    7 91 G 15

    Le problème se pose pour la CO où 3 équipes ont le même temps

    la reqête de Philben fonctionne très bien, mais pas pour les Ex-Aequo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT (select count(*)+1 from table1 as T2 where (T2.co+T2.cap+T2.vtt) < (T1.co+T1.cap+T1.vtt)) AS CL, 
    T1.CO, T1.CAP, T1.VTT, T1.NOM, T1.DOSSARD, [CO]+[CAP]+[VTT] AS TOTAL
    FROM Table1 AS T1
    GROUP BY T1.CO, T1.CAP, T1.VTT, T1.NOM, T1.DOSSARD
    ORDER BY [CO]+[CAP]+[VTT];
    D'avance merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour,

    malheureusement, il semble qu'Access n'accepte pas la syntaxe suivante qui devrait résoudre le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    count(distinct(MONCHAMP))
    La seule solution que je vois est de créer sa propre fonction de CpteDom qui ne va compter que les valeurs distinctes et non toutes les valeurs.

    Dans un module standard il faut donc créer la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    Public Function MonCpteDom(sSql As String) As Long
    On Error GoTo fin
       Dim oDb As DAO.Database
       Dim oRs As DAO.Recordset
       Set oDb = CurrentDb
       Set oRs = oDb.OpenRecordset(sSql, dbOpenSnapshot)
       If Not oRs.EOF Then
          oRs.MoveLast
          MonCpteDom = oRs.RecordCount
       End If
    fin:
       Set oRs = Nothing
       Set oDb = Nothing
    End Function
    ... et modifier les requêtes ainsi :

    pour la requête totale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT MonCpteDom("select distinct (co+cap+vtt) from table1 where
     (co+cap+vtt) <" & ([co]+[cap]+[vtt]))+1 AS CL, Table1.CO, Table1.CAP,
     Table1.VTT, Table1.NOM, Table1.DOSSARD, [CO]+[CAP]+[VTT] AS TOTAL
    FROM Table1
    GROUP BY Table1.CO, Table1.CAP, Table1.VTT, Table1.NOM,
     Table1.DOSSARD, [CO]+[CAP]+[VTT]
    ORDER BY [CO]+[CAP]+[VTT];
    pour l'épreuve CO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT MonCpteDom("select distinct co from table1 where co <" & [co])+1 AS CL,
     Table1.CO, Table1.NOM, Table1.DOSSARD
    FROM Table1
    GROUP BY Table1.CO, Table1.NOM, Table1.DOSSARD
    ORDER BY Table1.CO;
    Désolé, mais je ne vois pas d'autre solution que de passer par une fonction VBA.
    Si quelqu'un a une idée sans code VBA...

    Amicalement,

    Philippe

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Re-bonjour,

    j'ai regardé dans le réglement intérieur (qui se base sur le réglement du CIO) de mon club de sport AJB (Amicale des Joueurs de Belote) et il se base sur la première requête (confirmé par Yvette notre secrétaire)

    @+ !

    Philippe

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Salut Philben,

    Effectivement, après discussion avec des collègues, il s'avère que finalement, lorsqu'il y a des Ex-Aequo, comme dans mon exemple C 02; D 22 et E 03 à la 4ième place, et bien G 15 n'est pas 5ième comme je le demandais, mais belle et bien 7ième, comme le confirme l'exécution de la requête, qui fonctionne donc effectivement "très bien"
    Encore milles merci à Philben et désolé pour le dérangement
    @+
    Bruno

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Pas de problème, ça m'a permis de me pencher sur les équivalents de RANK et DENSE_RANK d'Oracle.

    Derrière le pseudo humour de mon dernier post il y avait bien une question existentielle !

    Bonne continuation,

    Philippe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HSQLDB]Problèmes avec requête
    Par Baptiste Wicht dans le forum JDBC
    Réponses: 7
    Dernier message: 06/06/2006, 22h28
  2. Problèmes avec Requêtes d'extraction
    Par NoBru dans le forum Access
    Réponses: 3
    Dernier message: 03/06/2006, 15h25
  3. Problème avec requête ajout
    Par teffal dans le forum Access
    Réponses: 3
    Dernier message: 29/04/2006, 16h41
  4. Problème avec requête ajout
    Par mitnick32 dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 18h02
  5. [VB6] Problème avec requête Update
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/02/2006, 03h40

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