Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/06/2006, 17h28   #1
Invité de passage
 
Inscription : mai 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 12
Points : 1
Points : 1
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
coolhead est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 19h06   #2
Inscrit
 
Inscription : mai 2004
Messages : 759
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 759
Points : 288
Points : 288
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
Citation:
$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
devalender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 20h08   #3
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
et même, il vaux mieux qualifer les champs ambigus
Code :
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
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2006, 09h01   #4
Invité de passage
 
Inscription : mai 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 12
Points : 1
Points : 1
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
coolhead est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2006, 13h36   #5
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Il faut écrire :
Code :
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 :
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
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h43.


 
 
 
 
Partenaires

Hébergement Web