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

SQL Firebird Discussion :

Plusieurs tables, Une requete (-104 invalid column reference)


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut Plusieurs tables, Une requete (-104 invalid column reference)
    Bonjour,

    J'ai un gros problème depuis 11H00.

    Je ne parviens pas à faire un GROUP BY alors que je nomme bien le champ dans le SELECT. J'ai essayé plein de truc mais rien n'y fait.

    J'ai en fait Deux tables :

    JEUNE : CODE_JEUNE, PRENOM_JEUNE, NOM_JEUNE
    ABSENCE_CONSTATEE : CODE_JEUNE, NB_CRENEAU, CODE_MOTIF_ABS

    Je fais :
    $Sql = "SELECT CODE_JEUNE, NOM_JEUNE, PRENOM_JEUNE
    FROM ABSENCE_CONSTATEE INNER JOIN JEUNE ON ABSENCE_CONSTATEE.CODE_JEUNE = JEUNE.CODE_JEUNE
    WHERE CODE_JEUNE < 10 GROUP BY CODE_JEUNE";

    Dès que j'enlève GROUP_BY c ok mais malheureusement j'en ai besoin pour faire mes clalcul.

    L'idée est de remonter la liste des Jeunes absence avec la somme de NB_CRENEAU qui correspond au cumul d'heure d'absence.

    Merci à tous

  2. #2
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 721
    Par défaut
    le pb est dans le titre de ton post , le serveur ne reconnais pas une de tes colonnes ! alors controle bien tes tables et leurs champs.
    ensuite pour le group by ilfaut ajouter touis les champs qui figurent dans le select
    $Sql = "SELECT CODE_JEUNE, NOM_JEUNE, PRENOM_JEUNE
    FROM ABSENCE_CONSTATEE INNER JOIN JEUNE ON ABSENCE_CONSTATEE.CODE_JEUNE = JEUNE.CODE_JEUNE
    WHERE CODE_JEUNE < 10 GROUP BY CODE_JEUNE,NOM_JEUNE, PRENOM_JEUNE
    ça ira

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    et même, il vaux mieux qualifer les champs ambigus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $Sql = "SELECT JEUNE.CODE_JEUNE, JEUNE.NOM_JEUNE, JEUNE.PRENOM_JEUNE
    FROM ABSENCE_CONSTATEE INNER JOIN JEUNE ON ABSENCE_CONSTATEE.CODE_JEUNE = JEUNE.CODE_JEUNE
    WHERE CODE_JEUNE < 10 GROUP BY 1,2,3

  4. #4
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 14
    Par défaut
    ok pour mettre les champs du SELECT dans le GROUP BY.
    Cependant, 2 choses :

    - 1 => à quoi correspond ce système de 1, 2, 3 ?
    - 2 => quand j'ajoute des champs SELECT pour avoir par exemple les créneaux horraire d'absence (NB_CRENEAU), ça marche mais ça fait n'importe quoi. Je me retrouve avec une dissociation du Jeune avec toute ses absences. De plus pour le SUM que je veux ajouter, le GROUP BY plante tout.

    SELECT
    JEUNE.CODE_JEUNE, JEUNE.PRENOM_JEUNE, JEUNE.NOM_JEUNE,
    ABSENCE_CONSTATEE.NB_CRENEAU,
    SUM(ABSENCE_CONSTATEE.NB_CRENEAU) AS NOMBRE
    FROM ABSENCE_CONSTATEE INNER JOIN JEUNE ON ABSENCE_CONSTATEE.CODE_JEUNE = JEUNE.CODE_JEUNE
    GROUP BY JEUNE.NOM_JEUNE

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 
    JEUNE.CODE_JEUNE, JEUNE.PRENOM_JEUNE, JEUNE.NOM_JEUNE, 
    ABSENCE_CONSTATEE.NB_CRENEAU, 
    SUM(ABSENCE_CONSTATEE.NB_CRENEAU) AS NOMBRE 
    FROM ABSENCE_CONSTATEE INNER JOIN JEUNE ON ABSENCE_CONSTATEE.CODE_JEUNE = JEUNE.CODE_JEUNE 
    GROUP BY JEUNE.NOM_JEUNE, JEUNE.CODE_JEUNE, JEUNE.PRENOM_JEUNE,  
    ABSENCE_CONSTATEE.NB_CRENEAU
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
    JEUNE.CODE_JEUNE, JEUNE.PRENOM_JEUNE, JEUNE.NOM_JEUNE, 
    ABSENCE_CONSTATEE.NB_CRENEAU, 
    SUM(ABSENCE_CONSTATEE.NB_CRENEAU) AS NOMBRE 
    FROM ABSENCE_CONSTATEE INNER JOIN JEUNE ON ABSENCE_CONSTATEE.CODE_JEUNE = JEUNE.CODE_JEUNE 
    GROUP BY 3, 1, 2,4
    ce qui revient au même, étant un alias pour les champs du select hors celui qui fait l'aggrégat

Discussions similaires

  1. [WD16] Comment ajouter une table à une requete existante
    Par ftahir dans le forum WinDev
    Réponses: 2
    Dernier message: 03/01/2012, 15h57
  2. Réponses: 7
    Dernier message: 22/09/2011, 09h03
  3. Réponses: 4
    Dernier message: 09/03/2010, 21h57
  4. Réponses: 8
    Dernier message: 12/10/2009, 13h31
  5. Réponses: 2
    Dernier message: 09/01/2006, 16h10

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