Une somme de deux vues qui ne marche pas HELP!!!

Signaler
Messages postés
5
Date d'inscription
jeudi 2 juillet 2009
Statut
Membre
Dernière intervention
14 février 2020
-
Messages postés
39
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
15 février 2010
-
Contexte : la *** a un parc de 50 vehicules situés dans différentes villes. La *** souhaiterais un site afin de suivre leurs interventions et leurs consomations. mais aussi des statistiques d'aide à la prise de décision :
je souhaiterais pouvoir calculer le cout des consomations et des interventions des vehicules de chacunes des villes afin d'emettre un graphique ou l'on pourais voir la ville qui dépense le plus etc...

Ma vue pour le calcul des interventions sur les vehicules organisés par ville :

CREATE VIEW dbo.vueClassementVillePlusCherIntervention
AS
SELECT TOP 100 PERCENT dbo.ville.vil_libelle, SUM(dbo.commande.cmd_montant_ttc) AS somInt
FROM dbo.ville INNER JOIN
dbo.vehicule ON dbo.ville.vil_id = dbo.vehicule.veh_vil_id INNER JOIN
dbo.Interventions ON dbo.vehicule.veh_immat = dbo.Interventions.int_veh_immat INNER JOIN
dbo.commande ON dbo.Interventions.int_id = dbo.commande.cmd_int_id
GROUP BY dbo.ville.vil_libelle
ORDER BY somInt DESC

Ma vue pour le calcul des consomations sur les vehicules organisés par ville :

CREATE VIEW dbo.vueClassementVillePlusCherConso
AS
SELECT dbo.ville.vil_libelle, SUM(dbo.consomation.conso_montant) AS somConso
FROM dbo.ville INNER JOIN
dbo.vehicule ON dbo.ville.vil_id = dbo.vehicule.veh_vil_id INNER JOIN
dbo.consomation ON dbo.vehicule.veh_immat = dbo.consomation.conso_veh_immat
GROUP BY dbo.ville.vil_libelle

Ma vue pour le calcul des consomations sur les vehicules organisés par ville :

CREATE VIEW dbo.vueClassementVillePlusCher
AS
SELECT TOP 100 PERCENT dbo.vueClassementVillePlusCherIntervention.vil_libelle,
( dbo.vueClassementVillePlusCherIntervention.somInt + dbo.vueClassementVillePlusCherConsommation.somConso) AS somCout
FROM dbo.vueClassementVillePlusCherIntervention,
dbo.vueClassementVillePlusCherConsommation

ORDER BY somCout DESC


Probleme : mes villes sont en double (normal il n'y a pas de group by) donc :

CREATE VIEW dbo.vueClassementVillePlusCher
AS
SELECT TOP 100 PERCENT dbo.vueClassementVillePlusCherIntervention.vil_libelle,
( dbo.vueClassementVillePlusCherIntervention.somInt + dbo.vueClassementVillePlusCherConsommation.somConso) AS somCout
FROM dbo.vueClassementVillePlusCherIntervention,
dbo.vueClassementVillePlusCherConsommation

group by dbo.vueClassementVillePlusCherIntervention.vil_libelle

ORDER BY somCout DESC

Probleme : MICROSOFT SQL-DMO SQLState:42000
Erreur 8120 la colonne somInt 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 du GROUP BY. la colonne somConso 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 du GROUP BY.



Merci pour la lecture et l'aide
cdlt

1 réponse

Messages postés
39
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
15 février 2010

Bonjour,

Quand tu regroupes, l'ensemble des champs requêtés doivent soit apparaître dans la clause GROUP BY, soit être aggrégés EX :
CREATE VIEW dbo.vueClassementVillePlusCher
AS
SELECT TOP 100 PERCENT dbo.vueClassementVillePlusCherIntervention.vil_libelle,
( SUM(dbo.vueClassementVillePlusCherIntervention.somInt) + SUM(dbo.vueClassementVillePlusCherConsommation.somConso) ) AS somCout
FROM dbo.vueClassementVillePlusCherIntervention,
dbo.vueClassementVillePlusCherConsommation

group by dbo.vueClassementVillePlusCherIntervention.vil_libelle

ORDER BY somCout DESC

A noter que le select TOP 100 PERCENT va te ramener 100% du résultat de requête, est-il vraiment utile en l'espèce ?