Probleme Requête Access
Forum Programmation : Probleme Requête Access
Bonjour,
Voila je suis étudiant en master système d'information et on nous demande de réaliser un TP sur les bases de donnée avec comme ecriture le mode sql.
Mon souci est que je suis pas très habile dans cette matière. Donc j'aimerai bien et bien sûre je remercie par avance pour toutes personnes qui pourrait m'aider à la réalisation de certaines requête.
les tables sont :
hotel(hotelID, nom, adresse, cp, ville, tel, nomGerant) : l’hôtel d’identifiant hotelID a pour nom nom, adresse adresse, code postal cp, ville ville, n° de téléphone tel, nom de gérant nomGerant.
chambre(chambreID, num, prix, hotelID) : la chambre d’identifiant (unique pour toute la chaîne hôtelière) chambreID a le n° (à l’intérieur de l’hôtel) num, le prix HT prix, et est située dans l’hôtel d’identifiant hotelID.
prestation(prestationID, libelle, prix, hotelID) : la prestation d’identifiant (unique pour toute la chaîne hôtelière)
prestationID de l’hôtel d’identifiant hotelID a le nom libelle et le prix HT prix.
reservation(reservationID, dateResa, chambreID, clientID, dateDebut, nbJour) : la réservation d’identifiant
reservationID a été effectuée à la date dateResa, pour la chambre d’identifiant chambreID, par le client d’identifiant
clientID, pour la date dateDebut et un nombre de jour nbJour. Si un client réserve plusieurs chambres, cela donne lieu a plusieurs réservations.
sejour(sejourID, chambreID, clientID, dateDebut, nbJour, reservationID) : le séjour d’identifiant sejourID concerne la
chambre chambreID, le client d’identifiant clientID, à partir de la date dateDebut pour un nombre de jours nbJour et intervient à la suite de la réservation reservationID (NULL si le séjour a été effectué sans réservation). Si un client a occupé plusieurs chambres, cela donnera lieu à un plusieurs séjours.
consomme(sejourID, prestationID, jour, qte) : il a été consommé pendant le sejour sejourID, une quantité qte de
prestation prestationID à la date jour.
facture(factureID, dateFact, sejourID) : la facture d’identifiant factureID a été émise à la date dateFact pour régler le séjour sejourID.
client(clientID, nomCli, prenomCli, adrCli, cpCli, villeCli, paysCli, telCli) : le client d’identifiant clientID a pour nom
nomCli, prénom prenomCli, adresse adrCli, code postal cpCli, ville villeCli, pays paysCli et n° de téléphone telCli.
Le taux de TVA applicable au prix des chambres et aux prestations est supposé fixe et égal à 19,6%.
Ecrire les requêtes suivantes dans lesquelles on supposera que hotelID = 1 :
a. Liste des séjours dont la durée est supérieure à celle de la réservation correspondante.
Ma proposition pour cette requête est
SELECT sejour.sejourID
FROM sejour, reservation
WHERE sejour.reservationID=reservation.reservationID And sejour.nbJour>reservation.nbJour;
b. Liste des chambres qui ne sont pas encore réservées pour une date (ultérieure) donnée en paramètre.
Pour cette requête qui me pose vraiment problème j'aimerai savoir si on ne pourrait pas créer une requête dans la quelle on aurait la liste de toutes les chambre occuper a une date donner.
Puis de creer une requête à l'aide de la précédente et de faire un NOT IN pour n'avoir que les chambres libres aux autres dates.
c. Liste des clients ayant occupé plusieurs chambres à une date de séjour donnée en paramètre.
d. Montant total TTC de chaque séjour, sachant que les séjours ayant donné lieu à une réservation donnent lieu à une surfacturation de 5 € TTC.
e. Pourcentage de chambres inoccupées pour chacun des jours d’une période donnée en paramètre.
f. Pourcentage pour chaque chambre, du nombre de nuits réservées dans cette chambre par rapport au nombre de nuits où
cette chambre a été occupée.
Merci encore pour votre aide car l'avenir de ma formation professionnelle en dépend alors encore un grand merci à vous tous
Salut,
a) ça devrait être ça
b) tu relis les tables chambre et réservation sur chambreID, et tu ajoutes dans une clause WHERE que la dateDebut est supérieure à la date passée en paramètre (@parametre ça doit s'écrire de mémoire)
c et le reste) tu n'as plus rien fait après ? c'est à nous de faire le reste ?
Message édité par OmaR le 21-10-2008 à 23:13:58
je travail en ce moment sur c'est requete mais je n'y arrive pas. Je ne lache pas l'affaire car je sais que j'y arriverais mais le probleme est que mes jour son compter pour faire ce tp car je dois le rendre pour Lundi 27 octobre 2008.
Je te remerci encore Omar. je vais essayer ta requete voir si elle marche mais j'avais pensé pour la requête b) a une formule avec Not In mais je sais pas trop.
Si tu peux m'aider par la suite que je compare mes resultat avec les tiens sa serais sympas.
Encore mille fois merci a++
Tu n'as pas besoin de NOT IN dans la requête b), juste d'un <> ou != je sais plus c'est quoi en SQL (<> me semble)
c)
- tu as besoin de lier 3 tables sejour, client et chambre
- pour calculer le nombre de résultat par personne, il faut faire un GROUP BY
- pour vérifier que le nombre de réservation est supérieur à 1 tu peux faire un HAVING COUNT(la colonne) > 1
- et pour une date donnée, tu devrais pouvoir faire ça facilement avec un égal.
d) Pour celle-ci, je pense que le plus simple est de faire deux requêtes (on pourrait en faire une seule avec un CASE WHEN ... ELSE ... sinon) que l'on va joindre avec UNION
Pour tes deux requêtes :
- tu as besoin de lier 2 tables sejour et chambre
Pour la première requête :
- tu prends tous les séjours où reservationID est null
- pour avoir le prix TTC, tu multiplies le prix de la chambre par le nombre de jours et par la TVA
Pour la deuxième requête :
- tu prends tous les séjours où reservationID n'est pas null
- pour avoir le prix TTC, tu multiplies le prix de la chambre par le nombre de jours, par la TVA et tu ajoutes 5€ au total pour la réservation
Puis tu fais un UNION sur les deux requêtes :
Code :
|
Après, je ne sais pas à quoi correspond ta table prestation, il y aura peut être besoin d'ajouter des choses depuis cette table ?!
e) là tu vas peut être avoir besoin d'un NOT IN avec une sous requête.
http://sqlpro.developpez.com/cours [...] es/#L1.2.1
Salut Omar encore merci pour ton aide.
Je voulais te dire que j'ai essayé ta méthode pour la requete b) mais je n'ai pas compris ton @paramètre. ce que j'ai compris pour ta requete c'est de l'écrire de la manière suivante :
SELECT CHAMBRE.CHAMBREID
FROM HOTEL. CHAMBRE. RESERVATION
WHERE HOTEL.HOTELID=1
AND HOTEL.HOTELID=CHAMBRE.CHAMBREID
AND CHAMBRE.CHAMBREID=RESERVATION.CHAMBREID
AND DATE>(RESERVATION.DATEDEBUT+RESERVATION.NBJOUR)
ET LA QUAND TU REGARDE POUR VOIR LE RESULTAT UNE FENETRE APPARAIT ET DEMANDE D'ENTRER UNE INFORMATION ALORS JE MET UNE DATE POUR VERIFIER POUR CERTAINE SA MARCHE MAIS POUR D'AUTRE NON.
Est ce que si je t'envois une copie de ma base de donner t'aiderais a y voir plus clair? Si Oui donne moi ton adresse email o pire la mienne est ******@yahoo.fr
encore merci Omar pour ton aide
Message édité par OmaR le 22-10-2008 à 17:04:12
http://macle.voila.fr/index.php?m= [...] er=4572338
c'est le lien ou j'ai stocker mon fichier il te suffit d'aller dans les document et tu trouvera le fichier access
encore merci Omar pour ton aide précieuse.
envoie moi un mail et je te donnerai le nom d'utilisateur ainsi que le mot de passe
Il faut s'inscrire sur voila pour avoir le fichier ![]()
| Citation : AND HOTEL.HOTELID=CHAMBRE.CHAMBREID |
Si tu relis l'hotel et la chambre en se basant sur le fait que l'ID de l'hotel est égal à l'id de la chambre, tu vas pas aller bien loin ;-)
l'histoire du @parameter c'est parce qu'il me semble qu'access gère les paramètres avec un @ devant, mais je peux me tromper, je n'ai jamais vraiment fait d'access... (ils sont gérés comme ça en SQL en tout cas)
PS : j'ai supprimé ton adresse mail, évite de la donner sur des forums si tu veux pas avoir du spam
Message édité par OmaR le 22-10-2008 à 17:08:39
je t'ai envoyer un message perso danslequel je te laisse les coordonner pour te loguer sur voila. Merci encore
ok, j'avais pas compris ça comme ça...
Mais non, on ne relis pas hotelID avec ChambreID
TU peux relier hotel.hotelID avec chambre.hotelID par contre
là tu dis tu veux tous les hotels et toutes les chambres dont l'ID de l'hotel est égal à l'ID de la chambre...
salut Omar.
j'ai essayer les instruction que tu ma dis pour toutes les requêtes mais apparament sa ne marche pas.
Pourrais tu me les décrire comment toi tu les marques sous access en sql?
j'ai essayer plein de truc mais a chaque fois j'ai une fenetre qui apparait et qui me demande d'entrer une valeur. Sa commence vraiment à m'agacer. Mais je prend sur moi.
en tous cas c'est super sympas pour tous ce que tu fais.
j'espere qu'on pourra rester en contact pour d'autre circonstance notament si tu a une ps3 on pourrait faire des partis.
Le problème c'est que en ce moment j'ai vraiment pas le temps avec tous les tp que je dois rendre et donc elle commence sérieusement a prendre de la poussière lol.
Bah si tu as une fenêtre pour demander une valeur c'est parce que tu as mis un paramètre, c'est bien ce qu'il faut non ?
Après, je ne les ai pas tapé sous Access, je te dis juste ce que j'aurais fait, ce n'est pas forcément tout exact à 100%.
Et non, je n'ai pas de PS3 ^^
Il y a 1496 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
