[SQL] Aide requête SQL Access 2010

Aide requête SQL Access 2010 [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 15-05-2011 à 15:11:00    

Bonjour,
J'ai besoin d'aide pour rédiger une requête en SQL sous microsoft access 2010.
Voici mon cahier des charges ainsi que le modèle logique de données.
 
http://img21.imageshack.us/img21/8601/sujet2010.jpg
 
Je dois traiter la requête suivante : Donner pour chaque agence proposant au minimum 10 hôtels dans la région Midi-Pyrénées, son nom et le nombre d'hôtels précis proposés dans cette même région.
 
Voici ce que j'ai fait:
SELECT nomag, count(*)
FROM hotel, agence, affilier
WHERE hotel.codeh=affilier.codeh AND agence.codeag=affilier.codeag AND régionh="midi-pyrénées"
GROUP BY hotel.codeh, nomag
HAVING count(*)>=10;
 
Mais cela ne marche pas; il n'y a pas de message d'erreur mais il ne me trouve aucune agence alors que j'en ai créé le nombre suffisant pour que cela puisse marcher.
Merci de m'aider

Reply

Marsh Posté le 15-05-2011 à 15:11:00   

Reply

Marsh Posté le 16-05-2011 à 10:44:24    

Normalement il devrait y avoir un message d'erreur car hotel.codeh est une colonne du group by, et il faudrait donc que ce soit une colonne du select.
 
A part ça, ca devrait marcher, sauf, éventuellement, si les champs des jointures ont des données nulles, auquel cas, il faudrait faire des jointures "externes".

Reply

Marsh Posté le 16-05-2011 à 13:25:54    

Oui merci; en effet il m'a suffit dans le goup by de ne mettre que nomag. Cependant, comment faire si je veux regrouper par codeag par exemple (au cas où il y aurait deux agences ayant le même nom), mais que je ne veux afficher que le nomag (dans le select)?

Reply

Marsh Posté le 16-05-2011 à 13:33:35    

Alors, il faudrait utiliser deux requêtes séparées avec un peu de code classique (C, PHP, etc) entre les deux, ou bien faire une requête et une sous-requête si la base de données le permet, du genre

select colonneC
 from
 (select colonneA, colonneB, colonneC, count(*)
   from ... group by colonneA, colonneB, colonneC)

Ou du genre

select colonneC
 in (select colonneA, colonneB, colonneC, count(*)
   from ... group by colonneA, colonneB, colonneC) from dual

(Je ne connais pas par coeur la syntaxe précise des sous-requêtes parce que je trouve personnellement qu'il est plus simple de travailler avec deux requêtes séparées, ou même une seule requête que l'on filtre ensuite avec code classique).

Reply

Sujets relatifs:

Leave a Replay

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