Tiduster Posté(e) le 6 juin 2009 Partager Posté(e) le 6 juin 2009 Salut tout le monde. J'suis pas très bon en SQL, et j'ai une requête à faire pour un projet, mais j'arrive pas à la faire fonctionner. L'énoncé de la requête : Afficher les statistiques / polices de l’ensemble des sinistres, et en particulier le montant total des sommes versées Donc je pensais afficher la somme des montants des voitures qui ont eu un accident et qui ont été considéré comme épave (donc remboursement complet). La somme des montants des réparations. Le nombre total de sinistres. Et le nombre d'épaves lors de ces sinistres (les voitures complètement détruite). ET tout ça pour chaque police. La BDD : http://nsa07.casimages.com/img/2009/06/06/...35631852350.png Alors j'ai fait ça comme requête : SELECT P.LibPolice, SUM(R.MontantR) AS TotalRéparation, SUM(A.ValeurEstimée) AS TotalRemplacement, COUNT(S.NumSinistre) AS NBSinistres, COUNT(RE.NumRapport) AS NbEpaves FROM Police AS P, Automobile AS A, Dossier AS D, Réparation AS R, Rapport_Expertise AS RE, Sinistre AS S, Contrat AS C WHERE P.NumPolice = C.NumPolice AND C.NumMatricule = A.NumMatricule AND C.NumContrat = S.NumContrat AND S.NumSinistre = D.NumSinistre AND D.NumDossier = R.NumDossier AND RE.NumDossier = D.NumDossier AND RE.NumDossier IN (SELECT RE.NumDossier FROM Rapport_Expertise AS RE WHERE RE.Epave = -1) GROUP BY 1 ORDER BY 1; Une voiture est soit déclarée épave, à partir de là l'assurance doit rembourser la valeur de la voiture. Soit elle peu être réparé et l'assurance paye le montant des réparations. Épave étant un booléen, -1 voulant dire qu'il s'agit bien d'une épave. Sauf que quand je l'exécute j'ai un message d'erreur : Et là j'avoue que je suis un peu coincé car je comprend pas ce qu'il veut me dire. Si vous pouviez m'expliquer ce qu'il entend par ce message, ça m'aiderait déjà beaucoup. Merci de votre aide ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 6 juin 2009 Partager Posté(e) le 6 juin 2009 A première vue je dirais qu'il y a un problème au niveau de la clause GROUP BY. En effet dans ta clause SELECT tu n'utilise que des fonctions d'agrégat (qui utilisent des "groupes" de données) mais pas le libellé LibPolice, donc il va y avoir un problème du fait que tu demande potentiellement plusieurs lignes de libellés mais une seule ligne de tout le reste. La règle à suivre est : Lors de l'utilisatoin de GROUP BY, ne rien mettre dans le SELECT qui ne soit pas une fonction d'agrégat (sum, max, avg, etc...) et qui ne serve pas de critère de regroupement dans GROUP BY. La colonne LibPolice enfreint cette règle :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.