Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SOUS REQUETE

3 réponses
Avatar
rafael
Bonjour tt le monde ! ! !

Je dispose d'une BDD sous ACCESS 2003 traitant le personnel avec une table
Employe (Employe_Num (identifiant; auto), Employe_Nom, Employe_Prenom...) et
une table Carriere (Carriere_Num (identifiant; auto), Carriere_Date_Entrée,
Carriere_Date_Sortie, Carriere_Type_Contrat...)

Cardinalités : EMPLOYE-----1,N-----------------------1,1-----CARRIERE

Quelques exemples :
TOTO, Num=1
Carriere1 = Date Entrée = 01/01/2000; Date Sortie = 31/05/2000;
3(=CDD)
Carriere3 = Date Entrée = 01/06/2000; Date Sortie = null; 4(=CDI)

TUTU, Num=2
Carriere2 = Date Entrée = 01/03/2000; Date Sortie = 31/08/2000

Je souhaite avoir la date d'entrée dans la société des employés qui sont
encore actifs (= Date de Sortie is null) et qui sont en CDD ou CDI.

Resultat : TOTO; Date Entrée = 01/01/2000


Voici ma requete :

SELECT Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS
PRENOM, Employe.Employe_Sexe AS SEXE, Min(Carriere.Carriere_Date_Entree) AS
[DATE D'ENTREE], Employe.Employe_Date_Naissance AS [DATE DE NAISSANCE]

FROM Employe INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num

WHERE Carriere.Carriere_Contrat_Type_Num = 3 OR
Carriere.Carriere_Contrat_Type_Num = 4 OR Carriere.Carriere_Contrat_Type_Num=
5

AND Employe_Num IN (


SELECT Employe_Num
FROM Employe INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num
WHERE Carriere_Date_Sortie is null)



GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom,
Employe.Employe_Sexe, Employe.Employe_Date_Naissance;


La sous requete me donne bien les employés actifs, mais la requete globale
me donne en plus des employés qui ne sont plus actifs (= leur(s) date(s) de
sortie sont toutes remplies)


En espérant que vous puissiez m'aider.

3 réponses

Avatar
Eric
Bonjour,

Avec peut-être :
SELECT * , (SELECT Min([Date Entrée]) FROM CARRIERE
WHERE Carriere_Employe_Num= E.Employe_Num)
FROM Employe E
WHERE Employe_Num In ( SELECT Carriere_Employe_Num
FROM Carriere
WHERE IsNull([Date Sortie]
AND Carriere_Type_Contrat_Num in(3,4,5)
)
;

A tester

Bonjour tt le monde ! ! !

Je dispose d'une BDD sous ACCESS 2003 traitant le personnel avec une table
Employe (Employe_Num (identifiant; auto), Employe_Nom, Employe_Prenom...) et
une table Carriere (Carriere_Num (identifiant; auto), Carriere_Date_Entrée,
Carriere_Date_Sortie, Carriere_Type_Contrat...)

Cardinalités : EMPLOYE-----1,N-----------------------1,1-----CARRIERE

Quelques exemples :
TOTO, Num=1
Carriere1 = Date Entrée = 01/01/2000; Date Sortie = 31/05/2000;
3(ÍD)
Carriere3 = Date Entrée = 01/06/2000; Date Sortie = null; 4(ÍI)

TUTU, Num=2
Carriere2 = Date Entrée = 01/03/2000; Date Sortie = 31/08/2000

Je souhaite avoir la date d'entrée dans la société des employés qui sont
encore actifs (= Date de Sortie is null) et qui sont en CDD ou CDI.

Resultat : TOTO; Date Entrée = 01/01/2000


Voici ma requete :

SELECT Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS
PRENOM, Employe.Employe_Sexe AS SEXE, Min(Carriere.Carriere_Date_Entree) AS
[DATE D'ENTREE], Employe.Employe_Date_Naissance AS [DATE DE NAISSANCE]

FROM Employe INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num

WHERE Carriere.Carriere_Contrat_Type_Num = 3 OR
Carriere.Carriere_Contrat_Type_Num = 4 OR Carriere.Carriere_Contrat_Type_Num=
5

AND Employe_Num IN (


SELECT Employe_Num
FROM Employe INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num
WHERE Carriere_Date_Sortie is null)



GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom,
Employe.Employe_Sexe, Employe.Employe_Date_Naissance;


La sous requete me donne bien les employés actifs, mais la requete globale
me donne en plus des employés qui ne sont plus actifs (= leur(s) date(s) de
sortie sont toutes remplies)


En espérant que vous puissiez m'aider.




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Rv
Salut,

Je pense que l'erreur vient des OR et de l'absence de parenthèses. Il
faudrait essayer :

WHERE (Carriere.Carriere_Contrat_Type_Num = 3 OR
Carriere.Carriere_Contrat_Type_Num = 4 OR
Carriere.Carriere_Contrat_Type_Num= 5) AND Employe_Num IN (SELECT
Employe_Num FROM Employe INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num WHERE Carriere_Date_Sortie is null)

Sinon j'utilise plutôt cette syntaxe qui donne sans doute un résultat plus
performant car le IN n'est pas réputé comment étant un foudre de guerre:

SELECT Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS
PRENOM, Employe.Employe_Sexe AS SEXE, Min(Carriere.Carriere_Date_Entree) AS
[DATE D'ENTREE], Employe.Employe_Date_Naissance AS [DATE DE NAISSANCE]
FROM (Employe
INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num)
INNER JOIN
(
SELECT Employe_Num
FROM Employe INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num
WHERE Carriere_Date_Sortie is null
) As sr ON Employe.Employe_Num = sr.Employe_Num
WHERE Carriere.Carriere_Contrat_Type_Num = 3 OR
Carriere.Carriere_Contrat_Type_Num = 4 OR
Carriere.Carriere_Contrat_Type_Num= 5
GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom,
Employe.Employe_Sexe, Employe.Employe_Date_Naissance;


A+

Rv







"rafael" a écrit dans le message de
news:
Bonjour tt le monde ! ! !

Je dispose d'une BDD sous ACCESS 2003 traitant le personnel avec une table
Employe (Employe_Num (identifiant; auto), Employe_Nom, Employe_Prenom...)
et
une table Carriere (Carriere_Num (identifiant; auto),
Carriere_Date_Entrée,
Carriere_Date_Sortie, Carriere_Type_Contrat...)

Cardinalités : EMPLOYE-----1,N-----------------------1,1-----CARRIERE

Quelques exemples :
TOTO, Num=1
Carriere1 = Date Entrée = 01/01/2000; Date Sortie = 31/05/2000;
3(ÍD)
Carriere3 = Date Entrée = 01/06/2000; Date Sortie = null; 4(ÍI)

TUTU, Num=2
Carriere2 = Date Entrée = 01/03/2000; Date Sortie = 31/08/2000

Je souhaite avoir la date d'entrée dans la société des employés qui sont
encore actifs (= Date de Sortie is null) et qui sont en CDD ou CDI.

Resultat : TOTO; Date Entrée = 01/01/2000


Voici ma requete :

SELECT Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS
PRENOM, Employe.Employe_Sexe AS SEXE, Min(Carriere.Carriere_Date_Entree)
AS
[DATE D'ENTREE], Employe.Employe_Date_Naissance AS [DATE DE NAISSANCE]

FROM Employe INNER JOIN Carriere ON Employe.Employe_Num > Carriere.Carriere_Employe_Num

WHERE Carriere.Carriere_Contrat_Type_Num = 3 OR
Carriere.Carriere_Contrat_Type_Num = 4 OR
Carriere.Carriere_Contrat_Type_Num > 5

AND Employe_Num IN (


SELECT Employe_Num
FROM Employe INNER JOIN Carriere ON Employe.Employe_Num > Carriere.Carriere_Employe_Num
WHERE Carriere_Date_Sortie is null)



GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom,
Employe.Employe_Sexe, Employe.Employe_Date_Naissance;


La sous requete me donne bien les employés actifs, mais la requete globale
me donne en plus des employés qui ne sont plus actifs (= leur(s) date(s)
de
sortie sont toutes remplies)


En espérant que vous puissiez m'aider.




Avatar
rafael
Messieurs


Effectivement, il s'agissait bien d'un pblme de parenthèses.
Ca marche à la perfection.
Je vous remercie pr vos promptes réponses.




Salut,

Je pense que l'erreur vient des OR et de l'absence de parenthèses. Il
faudrait essayer :

WHERE (Carriere.Carriere_Contrat_Type_Num = 3 OR
Carriere.Carriere_Contrat_Type_Num = 4 OR
Carriere.Carriere_Contrat_Type_Num= 5) AND Employe_Num IN (SELECT
Employe_Num FROM Employe INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num WHERE Carriere_Date_Sortie is null)

Sinon j'utilise plutôt cette syntaxe qui donne sans doute un résultat plus
performant car le IN n'est pas réputé comment étant un foudre de guerre:

SELECT Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS
PRENOM, Employe.Employe_Sexe AS SEXE, Min(Carriere.Carriere_Date_Entree) AS
[DATE D'ENTREE], Employe.Employe_Date_Naissance AS [DATE DE NAISSANCE]
FROM (Employe
INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num)
INNER JOIN
(
SELECT Employe_Num
FROM Employe INNER JOIN Carriere ON Employe.Employe_Num =
Carriere.Carriere_Employe_Num
WHERE Carriere_Date_Sortie is null
) As sr ON Employe.Employe_Num = sr.Employe_Num
WHERE Carriere.Carriere_Contrat_Type_Num = 3 OR
Carriere.Carriere_Contrat_Type_Num = 4 OR
Carriere.Carriere_Contrat_Type_Num= 5
GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom,
Employe.Employe_Sexe, Employe.Employe_Date_Naissance;


A+

Rv







"rafael" a écrit dans le message de
news:
Bonjour tt le monde ! ! !

Je dispose d'une BDD sous ACCESS 2003 traitant le personnel avec une table
Employe (Employe_Num (identifiant; auto), Employe_Nom, Employe_Prenom...)
et
une table Carriere (Carriere_Num (identifiant; auto),
Carriere_Date_Entrée,
Carriere_Date_Sortie, Carriere_Type_Contrat...)

Cardinalités : EMPLOYE-----1,N-----------------------1,1-----CARRIERE

Quelques exemples :
TOTO, Num=1
Carriere1 = Date Entrée = 01/01/2000; Date Sortie = 31/05/2000;
3(ÍD)
Carriere3 = Date Entrée = 01/06/2000; Date Sortie = null; 4(ÍI)

TUTU, Num=2
Carriere2 = Date Entrée = 01/03/2000; Date Sortie = 31/08/2000

Je souhaite avoir la date d'entrée dans la société des employés qui sont
encore actifs (= Date de Sortie is null) et qui sont en CDD ou CDI.

Resultat : TOTO; Date Entrée = 01/01/2000


Voici ma requete :

SELECT Employe.Employe_Nom_Patronymique AS NOM, Employe.Employe_Prenom AS
PRENOM, Employe.Employe_Sexe AS SEXE, Min(Carriere.Carriere_Date_Entree)
AS
[DATE D'ENTREE], Employe.Employe_Date_Naissance AS [DATE DE NAISSANCE]

FROM Employe INNER JOIN Carriere ON Employe.Employe_Num > > Carriere.Carriere_Employe_Num

WHERE Carriere.Carriere_Contrat_Type_Num = 3 OR
Carriere.Carriere_Contrat_Type_Num = 4 OR
Carriere.Carriere_Contrat_Type_Num > > 5

AND Employe_Num IN (


SELECT Employe_Num
FROM Employe INNER JOIN Carriere ON Employe.Employe_Num > > Carriere.Carriere_Employe_Num
WHERE Carriere_Date_Sortie is null)



GROUP BY Employe.Employe_Nom_Patronymique, Employe.Employe_Prenom,
Employe.Employe_Sexe, Employe.Employe_Date_Naissance;


La sous requete me donne bien les employés actifs, mais la requete globale
me donne en plus des employés qui ne sont plus actifs (= leur(s) date(s)
de
sortie sont toutes remplies)


En espérant que vous puissiez m'aider.