Base - Requete calcul montant contrat [SGBDR] - SQL/NoSQL - Programmation
Marsh Posté le 13-02-2008 à 14:05:23
Ben, deja tu melanges un sum avec un expression simple (ex : prix_loc)...ça ne peut pas marcher, il va au moins te falloir un group by quelques part.
Je ne connais pas base mais date_fin - date_debut...c'est un peu étonnant Tu n'as pas un datediff de dispo ?
"FROM Contrat, Forfaits, Vehicules, Tarifer, Categories "
J'ai du mal avec cette syntaxe. Tu es sur de ton schema relationnel ? Perso, j'prefere des bons vieux inner join
Marsh Posté le 13-02-2008 à 14:13:54
chapi a écrit : Ben, deja tu melanges un sum avec un expression simple (ex : prix_loc)...ça ne peut pas marcher, il va au moins te falloir un group by quelques part. |
Merci de ta reponse rapide.
Alors, j'ai mis un group by sur le numero du contrat.
J'ai mis un datediff pour les 2 dates.
Pour le inner join, je connais pas . Mais a priori mes jointures sont bonnes.
Maintenant j'ai une erreur sql, donc faut que je vois si j'ai pas une erreur de synthaxe toute bete quelque part.
Marsh Posté le 13-02-2008 à 14:18:20
Winnuke a écrit : |
group by sur le contrat ? Marchera pas. date_fin, date_debut, nb_jour, supp_jour et prix_loc sont des expressions simples
Un truc dans le genre:
SELECT SUM( ( Km_fin - Km_debut ) * Tarif_km ) , ( datediff(day,Date_fin,Date_debut ) - Nb_jours ) * Supp_jour , Prix_loc
FROM Contrat
inner join vehicules on contrat.N°_Immatriculation = Vehicules.N°_Immatriculation
inner join categories on Vehicules.Code_cat = Categories.Code_cat
inner join tarifer on Categories.Code_cat = Tarifer.Code_cat
where N°_contrat = 'CD-DIRE-12'
group by ( (Date_fin -Date_debut ) - Nb_jours ) * Supp_jour , Prix_loc
J'peux pas test
Marsh Posté le 13-02-2008 à 14:45:37
Non marche pas non plus
Mais ton inner join je suis pas fan, notre prof nous en a jamais parlé, ca doit etre que sur office.
Bon c'est pas grave, j'ai tente ca, mais je crois que j'ai pas le niveau au final...
Merci quand meme pour ton aide.
Marsh Posté le 13-02-2008 à 14:52:56
Winnuke a écrit : Non marche pas non plus |
Inner join, c'est un peu la base en sql quand même
Mon group by est faux, regarde bien
Spoiler : group by ( datediff(day,Date_fin,Date_debut ) - Nb_jours ) * Supp_jour , Prix_loc |
Marsh Posté le 13-02-2008 à 15:40:57
C'est surement la base mais meme la base on y est pas encore :x
En meme temps je suis en compta donc c'est vraiment juste de la decouverte
PS: Marche pas non plus avec la correction.
Marsh Posté le 13-02-2008 à 15:41:24
chapi a écrit : |
+100000
Faire autrement, avec des Where partout, c'est vraiment
Marsh Posté le 13-02-2008 à 15:59:58
Winnuke a écrit : C'est surement la base mais meme la base on y est pas encore :x |
Ben faudrait voir la tronche de ta base alors
Marsh Posté le 13-02-2008 à 19:21:56
J'ai reussi
C'etait juste ma fonction DateDiff qui etait pas bonne, fallait juste des ' autour de day... La lutte quoi...
Le "Sum" par contre, il veut pas, donc j'ai laissé mes + .
Ca donne ca:
SELECT (Km_fin - Km_debut) * Tarif_km + (DateDiff('day',Date_debut, Date_fin) - Nb_jours) * Supp_jour + Prix_loc
FROM Contrat, Vehicules, Categories, Forfaits, Tarifer
WHERE Contrat.N°_Immatriculation=Vehicules.N°_Immatriculation
AND Vehicules.Code_cat=Categories.Code_cat
AND Contrat.Periode_loc=Forfaits.Periode_loc
AND Forfaits.Periode_loc=Tarifer.Periode_loc
AND Categories.Code_cat=Tarifer.Code_cat
AND N°_contrat =: Entrez_un_numero_de_contrat;
Bon pour vous ca doit pas etre joli, je me doute, mais bon, sur base ca marche, c'est le principal
Marsh Posté le 13-02-2008 à 19:45:07
Un sum te fait la somme d'un ensemble de lignes.
Là si tu as plusieurs lignes avec le même numero de contrat (oui, c'est très con mais c'est pour l'exemple) tu auras un total par ligne.
Cela dit j'avais super mal visualisé ta requête. shame on me
Marsh Posté le 13-02-2008 à 13:58:49
Bonjour,
Je debute completement en sql, et la on est sous Base (open office).
Le but de la requete que j'aimerai faire est de calculer le montant d'une location de voiture.
Voila ce que j'ai fait, evidemment ca ne marche pas, mais je comprends pas bien ce qui cloche...
SELECT (SUM( ( Km_fin - Km_debut ) * Tarif_km ) , ( ( (Date_fin - Date_debut ) - Nb_jours ) * Supp_jour ) , Prix_loc) AS "CA Contrat"
FROM Contrat, Forfaits, Vehicules, Tarifer, Categories
WHERE Contrat.Periode_loc = Forfaits.Periode_loc
AND Contrat.N°_Immatriculation = Vehicules.N°_Immatriculation
AND Vehicules.Code_cat = Categories.Code_cat
AND Categories.Code_cat = Tarifer.Code_cat
AND N°_contrat = 'CD-DIRE-12'
Si quelqu'un qui s'y connait un minimum peut m'aiguiller ca me serait d'une grande aide.
Merci d'avance.