Requete Oracle

cs_tommie Messages postés 40 Date d'inscription jeudi 18 mars 2004 Statut Membre Dernière intervention 11 octobre 2005 - 19 sept. 2005 à 11:04
DuckyLuke Messages postés 28 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 30 septembre 2005 - 22 sept. 2005 à 12:34
bonjour j'ai un petit soucis avec une requete sous oracle, je vous explique le probleme:
j'ai trois tables de la forme:

-- TABLE SALARIE:


CREATE TABLE SPADMIN.SALARIE(
MATRICULE INTEGER,
STATACTIVITE VARCHAR2(60),
CIVILITE VARCHAR2(60),
NOM VARCHAR2(60),
PRENOM VARCHAR2(60),
CONSTRAINT SALARIE_PK PRIMARY KEY(MATRICULE)
);

-- TABLE ENFANT


CREATE TABLE SPADMIN.ENFANT(
MATRICULE INTEGER,
NOMENFANT VARCHAR2(60) ,
PRENOMENFANT VARCHAR2(60),
NUMENFANT INTEGER,
DATENAISSANCE DATE,
DATEFINENREG DATE,
CONSTRAINT ENFANT_PK PRIMARY KEY(MATRICULE,NUMENFANT),
CONSTRAINT ENFANT_MATRICULE FOREIGN KEY(MATRICULE) REFERENCES SALARIE(MATRICULE)
);

-- TABLE AFFECTATION


CREATE TABLE SPADMIN.AFFECTATION(
MATRICULE INTEGER,
DATEDEBAFF DATE,
DATEFINAFF DATE,
DATEDEBCHANGEMENT DATE,
IDDOMAINEPERSONNEL VARCHAR2(6),
CONSTRAINT AFFECTATION_PK PRIMARY KEY(MATRICULE,DATEDEBAFF,DATEDEBCHANGEMENT),
CONSTRAINT AFFECTATION_MATRICULE FOREIGN KEY(MATRICULE) REFERENCES SALARIE(MATRICULE),
CONSTRAINT AFFECTATION_DOM FOREIGN KEY(IDDOMAINEPERSONNEL) REFERENCES DOMAINEPERSONNEL(IDDOMAINEPERSONNEL)
);



et donc dans ma requete je voudrais avoir:
Je voudrais pouvoir compter le nombre d'enfant par année de naissance compris entre 1978 et 2005 et que leur date de déces soit egale a 31/12/9999 Par contre je voudrais faire un autre test dans cette requete c'est qu'en plus de ca je ramene que les enfants dont le parent(table salarie) ait une affectation(table affectation) dont le iddomainepersonnel soit egal a 2129 et que leur date affectation soit la plus grande.

j'ai fait une esquisse comme ca mais ca ne fonctionne pas.
pourriez vous m'aider
ou faire une requete pas a pas du genre
en premier je selcetionne tous les parents qui a la date d'affectation la plus grande ont un iddomainepersonnel = 2129
qu'ensuite je selectionne tous les enfant dont la date de naissance est compris entre 1978 et 2005 et que leur date de datefinenreg soit différente de 31/12/9999
et que seulement apres je selectionne tous les enfants avec ces criteres dont les parents correspondent (criteres d'avant)
merci de votre aide a tous!

esquisse de ma requete:
select to_char(E.datenaissance,'yyyy') as annee, count(E.matricule) from enfant E, Salarie S, Affectation A where S.matricule A.matricule and A.iddomainePersonnel'2129' and S.matricule = E.matricule and to_char(E.datenaissance,'yyyy') <= 2003 and to_char(E.datenaissance,'yyyy') >= 1977 and TO_CHAR(E.datefinenreg,'dd/mm/yyyy') = '31/12/9999'
and A.DateDebChangement = (SELECT MAX(A2.DateDebChangement) FROM Affectation A2 WHERE A.matricule=A2.matricule)
group by to_char(E.datenaissance,'yyyy');

1 réponse

DuckyLuke Messages postés 28 Date d'inscription lundi 4 novembre 2002 Statut Membre Dernière intervention 30 septembre 2005
22 sept. 2005 à 12:34
Essaye avec çà...
La requête passe mais comme je n'ai pas d'enregistrement de test, c'est difficle de vérifier qu'elle est vraiment correcte.

SELECT Year(E.DATENAISSANCE) AS Année, Count(E.MATRICULE) AS Nombre
FROM (SALARIE AS S INNER JOIN AFFECTATION AS A ON S.MATRICULE A.MATRICULE) INNER JOIN ENFANT AS E ON S.MATRICULE E.MATRICULE
GROUP BY Year(E.DATENAISSANCE), E.DATEFINENREG, A.IDDOMAINEPERSONNEL, A.DATEDEBCHANGEMENT
HAVING (((E.DATEFINENREG)='31/12/9999') AND ((A.IDDOMAINEPERSONNEL)='2129') AND ((Year(E.DATENAISSANCE))>1977 And (Year(E.DATENAISSANCE))<2006) AND ((A.DATEDEBCHANGEMENT)=(SELECT MAX(DATEDEBCHANGEMENT) FROM AFFECTATION)));
0
Rejoignez-nous