Bloqué sur des requetes SQL basiques dans Access

Bloqué sur des requetes SQL basiques dans Access - SQL/NoSQL - Programmation

Marsh Posté le 14-06-2011 à 20:46:37    

Hello,  
 
Je débute avec les requetes SQL sur Access et j'ai quelques problèmes:  
 
J'ai une table enfant avec pour chaque ligne leur date de naissance (date_naiss_enfant), un identifiant unique (num_enfant) et l'identifant de leurs parents (num_inscription)  
 
1. Donnez pour le membre N°438 la date de naisance de ses enfants triés par ordre croissance avec une colonne indiquant le rang de l'enfant (1 étant le plus jeune)  
 
J'ai fait ça:  
SELECT num_inscription, date_naiss_enfant  
FROM Enfant  
WHERE num_inscription=438  
GROUP BY date_naiss_enfant, num_inscription  
ORDER BY date_naiss_enfant;  
 
J'ai bien la liste des enfants et leur date de naissance mais comment faire apparaitre une colonne rang numérotant les enfants à partir de leur date de naissance de manière croissante?  
 
2. Donnez le n° des membres qui ont déclaré plus de trois enfants.  
 
Là je ne sais pas faire, j'avais fait ça...  
 
SELECT num_inscription, count(*)  
FROM ENFANT  
WHERE ENFANT.num_inscription >2  
;  
 
voilà si vous pouviez m'aider en corrigeant mes requetes  
merci!

Reply

Marsh Posté le 14-06-2011 à 20:46:37   

Reply

Marsh Posté le 14-06-2011 à 21:30:14    

Le Group By s'utilise avec count(*) ou max(), ou une autre fonction concernant un groupe.
 
Votre première requête ne va donc pas, car vous avez un Group By, mais pas de count(*), ni d'autres fonctions de groupe.
 
Votre seconde requête ne va pas car vous avez un Count(*) mais pas de Group By.
 
Peut-être que vous devriez prendre quelques minutes pour lire un manuel ou un tutoriel sur le SQL, au lieu décrire des requêtes en alignant des mots clés au hasard.

Reply

Marsh Posté le 15-06-2011 à 14:44:14    

1.
on prend comme rang le nombre de grands freres (ou grandes soeurs) plus un.

Code :
  1. SELECT e.num_inscription, e.date_naiss_enfant, COUNT(grand_frere.*) +1 AS rang_enfant
  2. FROM Enfant e
  3. LEFT JOIN Enfant grand_frere ON frere.num_inscription=438 AND grand_frere.date_naiss_enfant < e.data_naiss_enfant
  4. WHERE e.num_inscription=438
  5. GROUP BY e.date_naiss_enfant, e.num_inscription
  6. ORDER BY e.date_naiss_enfant;
 

2.

Code :
  1. SELECT num_inscription, COUNT(*) AS NEnfants FROM Enfant GROUP BY num_inscription HAVING NEnfants  > 3


Message édité par Paulp le 15-06-2011 à 14:44:27
Reply

Marsh Posté le 15-06-2011 à 22:12:05    

merci Paulp, elle ne fonctionne pas telle quelle mais je vais d'abord essayer de la comprendre :)
 
pour la deuxième je l'ai modifiée comme ceci car il ne me reconnaissait pas le Nenfants dans le HAVING:
SELECT num_inscription, COUNT (*) AS nenfants
FROM Enfant
GROUP BY num_inscription
HAVING COUNT (*) > 3;
 
billgatesanonym, je sais que je manque de notions mais malheureusement je n'ai pas assez de temps pour m'y mettre à fond, les langages c'est tout nouveau pour moi, je n'ai encore strictement aucun automatisme et les messages d'erreur d'Access ne sont pas très instructifs...


Message édité par coolweb le 15-06-2011 à 22:29:07
Reply

Marsh Posté le 21-06-2011 à 20:55:55    

Hello,
 
Voici ce que j'ai reussi à faire avec l'aide d'internet pour afficher le rang selon les dates de naissance:
 
SELECT (SELECT Count(date_naiss_enfant)+1 AS Expr1
FROM
(
SELECT DISTINCT date_naiss_enfant
FROM enfant AS T2
 
)
WHERE T2.date_naiss_enfant>enfant.date_naiss_enfant
) AS rang, Enfant.Date_naiss_enfant
FROM Enfant;
 
Cependant je ne sais pas comment lui dire de ne calculé et de n'afficher les rang que pour le membre dont num_inscription=438, une idée?
 
merci!

Reply

Sujets relatifs:

Leave a Replay

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