[SGBDR] Base - Requete calcul montant contrat

Base - Requete calcul montant contrat [SGBDR] - SQL/NoSQL - Programmation

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.

Reply

Marsh Posté le 13-02-2008 à 13:58:49   

Reply

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 :D 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 :O


---------------
I drive at 88mph ! Just in case...
Reply

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.
 
Je ne connais pas base mais date_fin - date_debut...c'est un peu étonnant :D 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 :O


 
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 :D  . 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.

Reply

Marsh Posté le 13-02-2008 à 14:18:20    

Winnuke a écrit :


 
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 :D  . 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.


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 :O


Message édité par chapi le 13-02-2008 à 14:19:35

---------------
I drive at 88mph ! Just in case...
Reply

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.

Reply

Marsh Posté le 13-02-2008 à 14:52:56    

Winnuke a écrit :

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.


Inner join, c'est un peu la base en sql quand même :D
 
Mon group by est faux, regarde bien ;)
 

Spoiler :

group by ( datediff(day,Date_fin,Date_debut ) - Nb_jours ) * Supp_jour  , Prix_loc

Message cité 1 fois
Message édité par chapi le 13-02-2008 à 14:53:14

---------------
I drive at 88mph ! Just in case...
Reply

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.

Reply

Marsh Posté le 13-02-2008 à 15:41:24    

chapi a écrit :


Inner join, c'est un peu la base en sql quand même :D


+100000
Faire autrement, avec des Where partout, c'est vraiment  [:vomi]


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

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
En meme temps je suis en compta donc c'est vraiment juste de la decouverte ;)
 
PS: Marche pas non plus avec la correction.


Ben faudrait voir la tronche de ta base alors :D


---------------
I drive at 88mph ! Just in case...
Reply

Marsh Posté le 13-02-2008 à 18:31:06    

Voila ma base, mais qui est donc en format open office:
Lien
 
PS: je regarde si ya un truc pour la convertir vers office

Reply

Marsh Posté le 13-02-2008 à 18:31:06   

Reply

Marsh Posté le 13-02-2008 à 19:21:56    

J'ai reussi  [:bodette]
C'etait juste ma fonction DateDiff qui etait pas bonne, fallait juste des ' autour de day...   La lutte quoi...  :sleep:

 

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 :D

 


Message édité par Winnuke le 13-02-2008 à 19:22:14
Reply

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 :D 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 :O


---------------
I drive at 88mph ! Just in case...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed