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

IHM Discussion :

Créer Etat - Clause GROUP-BY multi-niveaux non autorisée dans une sous-requête [Toutes versions]


Sujet :

IHM

  1. #1
    Membre habitué Avatar de Alt157
    Profil pro
    Inscrit en
    Février 2009
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 143
    Points : 146
    Points
    146
    Par défaut Créer Etat - Clause GROUP-BY multi-niveaux non autorisée dans une sous-requête
    Bonjour à tous,

    Je suis entrain de créer un état mais j'ai un petit problème lorsque je veux effectuer un regroupement. Le message d'erreur est le suivant :
    Citation Envoyé par Access
    Clause GROUP-BY multi-niveaux non autorisée dans une sous-requête
    Ci-dessous le schéma de la base:
    * retraite (N°,prenom, nom, adresse, code_postal, ville, ..., centre)
    * cotisation ( annee, retraite) // retraite = identifiant du retraité
    * centre(N°, libelle)

    Mon état a besoin d'afficher les informations de la personne ainsi que le fait qu'il ait cotisé ou non durant les 4 dernières années.

    Ma requête récupère donc ces informations et dans l'état j'ai ajouté la clause GROUP par libelle du centre et depuis j'ai l'erreur citée plus haut.

    Ci-dessous ma requête :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SELECT nom, prenom, adresse, complement_adresse, code_postal, ville, libelle, (
                SELECT 1
                FROM cotisation
                WHERE retraite = R.N°
                AND annee = YEAR(NOW())
            ) as annee,
            (
                SELECT 1
                FROM cotisation
                WHERE retraite = R.N°
                AND annee = YEAR(NOW()) - 1
            ) as annee_moins_1,
            (
                SELECT 1
                FROM cotisation
                WHERE retraite = R.N°
                AND annee = YEAR(NOW()) - 2
            ) as annee_moins_2,
            (
                SELECT 1
                FROM cotisation
                WHERE retraite = R.N°
                AND annee = YEAR(NOW()) - 3
            ) as annee_moins_3
        FROM retraite as R inner join centre on R.centre = centre.N°
        ORDER BY libelle, nom, prenom;
    Merci par avance pour votre aide,
    Les filles sont comme les noms de domaines : les meilleures sont déjà prises.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    essaye en glissant un DISTINCT dans la requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT nom, prenom, …

    Sinon tu peux aussi essayer de remplacer tes sous-requêtes par des appels avec la fonction DLookUp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (DLookUp("1","cotisation","[retraite]=" & R.N° & "  AND [Annee]=" & YEAR(NOW()))) AS annee, …

  3. #3
    Membre habitué Avatar de Alt157
    Profil pro
    Inscrit en
    Février 2009
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 143
    Points : 146
    Points
    146
    Par défaut
    Bonjour,

    Je viens de tester vos propositions mais rien ne change :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT nom, prenom, adresse, complement_adresse, code_postal, ville, libelle, 
        (DLookUp("1","cotisation","[retraite]=" & R.N° & "  AND [Annee]=" & YEAR(NOW()))) AS annee,
    (DLookUp("1","cotisation","[retraite]=" & R.N° & "  AND [Annee]=" & YEAR(NOW()) - 1)) AS annee_moins_1,
    (DLookUp("1","cotisation","[retraite]=" & R.N° & "  AND [Annee]=" & YEAR(NOW()) - 2)) AS annee_moins_2,
    (DLookUp("1","cotisation","[retraite]=" & R.N° & "  AND [Annee]=" & YEAR(NOW()) - 3)) AS annee_moins_3
    FROM retraite AS R INNER JOIN centre ON R.centre=centre.N°
    ORDER BY libelle, nom, prenom;
    et :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SELECT distinct nom, prenom, adresse, complement_adresse, code_postal, ville, libelle, (
                SELECT 1
                FROM cotisation
                WHERE retraite = R.N°
                AND annee = YEAR(NOW())
            ) as annee,
            (
                SELECT 1
                FROM cotisation
                WHERE retraite = R.N°
                AND annee = YEAR(NOW()) - 1
            ) as annee_moins_1,
            (
                SELECT 1
                FROM cotisation
                WHERE retraite = R.N°
                AND annee = YEAR(NOW()) - 2
            ) as annee_moins_2,
            (
                SELECT 1
                FROM cotisation
                WHERE retraite = R.N°
                AND annee = YEAR(NOW()) - 3
            ) as annee_moins_3
        FROM retraite as R inner join centre on R.centre = centre.N°
        ORDER BY libelle, nom, prenom;
    Merci encore, quelqu'un aurait il une autre idée ?
    Les filles sont comme les noms de domaines : les meilleures sont déjà prises.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 600
    Points : 56 698
    Points
    56 698
    Billets dans le blog
    40
    Par défaut
    Le coup classique du "pourtantchezmoiçamarche"



    Au choix avec le SELECT DISTINCT ou les DLookUp… 

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Merci (...qq temps plus tard)
    Merci @f-leb, ça marche chez moi aussi

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

Discussions similaires

  1. Table non reconnue dans une sous requête
    Par hammag dans le forum SQL
    Réponses: 10
    Dernier message: 03/10/2012, 11h53
  2. Requête UNION dans une sous-requête, est-ce vraiment non autorisé
    Par sophie) dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 15/01/2012, 17h49
  3. Réponses: 10
    Dernier message: 19/05/2008, 14h46
  4. Réponses: 7
    Dernier message: 20/12/2007, 15h13
  5. Contourner le non-support de limit dans une sous-requête
    Par Christophe Charron dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/09/2007, 10h45

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