Bonjour je travaille actuellement sur une base SQL Server et rencontre
certain probl=E8me avec les fonctions d'agr=E9gation et de regroupement:
=E7a n'agregue et ne regroupe rien du tout !! :-)
D=E9monstration sur une table toute simple:
create table VOITURE
(
id int,
marque varchar(20),
Montant int
)
Je lance le regroupement et cherche =E0 obtenir la somme des montants /
marque de voiture :
select id, marque, SUM(montant)
from voiture
group by marque
Et l=E0 SQL Server me retourne l'erreure suivante:
"Serveur : Msg 8120, Niveau 16, =C9tat 1, Ligne 23
La colonne 'voiture.id n'est pas valide dans la liste de s=E9lection
parce qu'elle n'est pas contenue dans une fonction d'agr=E9gation ou
dans la clause GROUP BY."
Je n'ai jamais compris pourquoi (si quelqu'un peux m'expliquer au
passage je lui dit un grand merci) on doit retrouver dans la clause
GROUP BY les champs
contenus dans la clause SELECT ... enfin on =E9coute le server et on
recommence :
select id, marque, SUM(montant)
from voiture
group by marque, id
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
BVesan
Bonjour, Le problème que vous rencontrez est le suivant: SQL Server agrège correctement, mais vous n'effectuez que des agrégats d'une ligne !!!
La présence de la colonne ID (qui a priori est votre identifiant unique de véhicule) empêche le réel agrégat. Il suffit donc de supprimer cette colonne des clauses SELECT et GROUP BY:
select marque, SUM(montant) from voiture group by marque
Benjamin
"" a écrit :
Bonjour je travaille actuellement sur une base SQL Server et rencontre certain problème avec les fonctions d'agrégation et de regroupement: ça n'agregue et ne regroupe rien du tout !! :-)
Démonstration sur une table toute simple:
create table VOITURE ( id int, marque varchar(20), Montant int )
Je lance le regroupement et cherche à obtenir la somme des montants / marque de voiture :
select id, marque, SUM(montant) from voiture group by marque
Et là SQL Server me retourne l'erreure suivante:
"Serveur : Msg 8120, Niveau 16, État 1, Ligne 23 La colonne 'voiture.id n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY."
Je n'ai jamais compris pourquoi (si quelqu'un peux m'expliquer au passage je lui dit un grand merci) on doit retrouver dans la clause GROUP BY les champs contenus dans la clause SELECT ... enfin on écoute le server et on recommence :
select id, marque, SUM(montant) from voiture group by marque, id
Bref aucun effet ... MAX et Min ne fonctionne pas non plus.
J'ai grand besoin d'aide ... En vous remerciant,
Olivier
Bonjour,
Le problème que vous rencontrez est le suivant:
SQL Server agrège correctement, mais vous n'effectuez que des agrégats d'une
ligne !!!
La présence de la colonne ID (qui a priori est votre identifiant unique de
véhicule) empêche le réel agrégat.
Il suffit donc de supprimer cette colonne des clauses SELECT et GROUP BY:
select marque, SUM(montant)
from voiture
group by marque
Benjamin
"odelacour@gmail.com" a écrit :
Bonjour je travaille actuellement sur une base SQL Server et rencontre
certain problème avec les fonctions d'agrégation et de regroupement:
ça n'agregue et ne regroupe rien du tout !! :-)
Démonstration sur une table toute simple:
create table VOITURE
(
id int,
marque varchar(20),
Montant int
)
Je lance le regroupement et cherche à obtenir la somme des montants /
marque de voiture :
select id, marque, SUM(montant)
from voiture
group by marque
Et là SQL Server me retourne l'erreure suivante:
"Serveur : Msg 8120, Niveau 16, État 1, Ligne 23
La colonne 'voiture.id n'est pas valide dans la liste de sélection
parce qu'elle n'est pas contenue dans une fonction d'agrégation ou
dans la clause GROUP BY."
Je n'ai jamais compris pourquoi (si quelqu'un peux m'expliquer au
passage je lui dit un grand merci) on doit retrouver dans la clause
GROUP BY les champs
contenus dans la clause SELECT ... enfin on écoute le server et on
recommence :
select id, marque, SUM(montant)
from voiture
group by marque, id
Bonjour, Le problème que vous rencontrez est le suivant: SQL Server agrège correctement, mais vous n'effectuez que des agrégats d'une ligne !!!
La présence de la colonne ID (qui a priori est votre identifiant unique de véhicule) empêche le réel agrégat. Il suffit donc de supprimer cette colonne des clauses SELECT et GROUP BY:
select marque, SUM(montant) from voiture group by marque
Benjamin
"" a écrit :
Bonjour je travaille actuellement sur une base SQL Server et rencontre certain problème avec les fonctions d'agrégation et de regroupement: ça n'agregue et ne regroupe rien du tout !! :-)
Démonstration sur une table toute simple:
create table VOITURE ( id int, marque varchar(20), Montant int )
Je lance le regroupement et cherche à obtenir la somme des montants / marque de voiture :
select id, marque, SUM(montant) from voiture group by marque
Et là SQL Server me retourne l'erreure suivante:
"Serveur : Msg 8120, Niveau 16, État 1, Ligne 23 La colonne 'voiture.id n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY."
Je n'ai jamais compris pourquoi (si quelqu'un peux m'expliquer au passage je lui dit un grand merci) on doit retrouver dans la clause GROUP BY les champs contenus dans la clause SELECT ... enfin on écoute le server et on recommence :
select id, marque, SUM(montant) from voiture group by marque, id