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

Su4p Messages postés 5 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 14 février 2020 - 28 janv. 2010 à 08:51
hymnuade Messages postés 39 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 15 février 2010 - 15 févr. 2010 à 16:28
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

hymnuade Messages postés 39 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 15 février 2010
15 févr. 2010 à 16:28
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 ?
0