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...)
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)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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...)
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
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...)
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
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...)
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
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...)
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.
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" <rafael@discussions.microsoft.com> a écrit dans le message de
news:4D784D30-C154-44E7-B8B4-0E5AD2FCE83C@microsoft.com...
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...)
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)
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...)
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.
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...)
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.
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" <rafael@discussions.microsoft.com> a écrit dans le message de
news:4D784D30-C154-44E7-B8B4-0E5AD2FCE83C@microsoft.com...
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...)
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)
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...)
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)