dépassement du NBRE de caractères dans une requête
2 réponses
rafael
Bonjour à tous et à toutes ! ! !
Je dispose d'une base sous ACCESS 2003 sur laquelle je dois afficher le
nombre d'absence par semaine et par service.
J'ai commencé ma requête comme ci-dessous.
Le problème est qu'arrivé à la 37ème semaine, je dépasse le nombre de
caractères autorisés pour une requête.
Il faudrait donc la modifier/simplifier.
Quelqu'un peux-t-il m'aider ?
SELECT "1" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as
ABS , [An ?] as AN, AbsenceType_Nom AS TYPE
FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN
Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON
Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON
Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN
CarriereServiceFonctionMission ON Carriere.Carriere_Num =
CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num)
ON Service.Service_Num =
CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num
WHERE
(AbsenceType_Nom NOT LIKE "Récupération"
AND AbsenceType_Nom NOT LIKE "Congés Payés")
AND
(Absence_Date_Debut >= Carriere_Date_Entree
AND
(
Absence_Date_Fin < Carriere_Date_Sortie
OR Carriere_Date_Sortie is null
)
AND Year(Absence_Date_Debut) = [An ?]
)
AND
(
year(Carriere_Date_Entree) <= [An ?]
)
AND
(
Carriere_Date_Sortie is null
OR year(Carriere_Date_Sortie)>=[An ?]
)
AND
(
DatePart("ww",Absence_Date_Debut) = 1
OR DatePart("ww",Absence_Date_Fin) = 1
OR
(
DatePart("ww",Absence_Date_Debut) < 1
AND
DatePart("ww",Absence_Date_Fin) > 1
)
)
GROUP BY Service_Nom , AbsenceType_Nom
UNION ALL SELECT "2" AS SEMAINE, Service_Nom as SERVICE,
count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE
FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN
Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON
Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON
Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN
CarriereServiceFonctionMission ON Carriere.Carriere_Num =
CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num)
ON Service.Service_Num =
CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num
WHERE
(
AbsenceType_Nom NOT LIKE "Récupération"
AND AbsenceType_Nom NOT LIKE "Congés Payés"
)
AND
(
Absence_Date_Debut >= Carriere_Date_Entree
AND
(
Absence_Date_Fin < Carriere_Date_Sortie
OR Carriere_Date_Sortie is null
)
AND Year(Absence_Date_Debut) = [An ?]
)
AND
(
year(Carriere_Date_Entree) <= [An ?]
)
AND
(
Carriere_Date_Sortie is null
OR year(Carriere_Date_Sortie)>=[An ?]
)
AND
(
DatePart("ww",Absence_Date_Debut) = 2
OR DatePart("ww",Absence_Date_Fin) = 2
OR
(
DatePart("ww",Absence_Date_Debut) < 2
AND
DatePart("ww",Absence_Date_Fin) > 2
)
)
GROUP BY Service_Nom , AbsenceType_Nom
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
heureux-oli
Tu peux essayer d'extraire la semaine de la date et faire un groupement sur cette semaine et sur le service
L'aide Access donne ceci " Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
"rafael" a écrit dans le message de news:
Bonjour à tous et à toutes ! ! !
Je dispose d'une base sous ACCESS 2003 sur laquelle je dois afficher le nombre d'absence par semaine et par service. J'ai commencé ma requête comme ci-dessous. Le problème est qu'arrivé à la 37ème semaine, je dépasse le nombre de caractères autorisés pour une requête. Il faudrait donc la modifier/simplifier. Quelqu'un peux-t-il m'aider ?
SELECT "1" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN CarriereServiceFonctionMission ON Carriere.Carriere_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num) ON Service.Service_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num WHERE (AbsenceType_Nom NOT LIKE "Récupération" AND AbsenceType_Nom NOT LIKE "Congés Payés") AND (Absence_Date_Debut >= Carriere_Date_Entree AND ( Absence_Date_Fin < Carriere_Date_Sortie OR Carriere_Date_Sortie is null ) AND Year(Absence_Date_Debut) = [An ?] ) AND ( year(Carriere_Date_Entree) <= [An ?] ) AND ( Carriere_Date_Sortie is null OR year(Carriere_Date_Sortie)>=[An ?] ) AND ( DatePart("ww",Absence_Date_Debut) = 1 OR DatePart("ww",Absence_Date_Fin) = 1 OR ( DatePart("ww",Absence_Date_Debut) < 1 AND DatePart("ww",Absence_Date_Fin) > 1 ) ) GROUP BY Service_Nom , AbsenceType_Nom
UNION ALL SELECT "2" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN CarriereServiceFonctionMission ON Carriere.Carriere_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num) ON Service.Service_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num WHERE ( AbsenceType_Nom NOT LIKE "Récupération" AND AbsenceType_Nom NOT LIKE "Congés Payés" ) AND ( Absence_Date_Debut >= Carriere_Date_Entree AND ( Absence_Date_Fin < Carriere_Date_Sortie OR Carriere_Date_Sortie is null ) AND Year(Absence_Date_Debut) = [An ?] ) AND ( year(Carriere_Date_Entree) <= [An ?] ) AND ( Carriere_Date_Sortie is null OR year(Carriere_Date_Sortie)>=[An ?] ) AND ( DatePart("ww",Absence_Date_Debut) = 2 OR DatePart("ww",Absence_Date_Fin) = 2 OR ( DatePart("ww",Absence_Date_Debut) < 2 AND DatePart("ww",Absence_Date_Fin) > 2 ) ) GROUP BY Service_Nom , AbsenceType_Nom
Merci d'avance.
Tu peux essayer d'extraire la semaine de la date et faire un groupement sur
cette semaine et sur le service
L'aide Access donne ceci "
Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
"rafael" <rafael@discussions.microsoft.com> a écrit dans le message de news:
5A3C1C3C-D45B-4424-BD77-E7F22DC88CFF@microsoft.com...
Bonjour à tous et à toutes ! ! !
Je dispose d'une base sous ACCESS 2003 sur laquelle je dois afficher
le
nombre d'absence par semaine et par service.
J'ai commencé ma requête comme ci-dessous.
Le problème est qu'arrivé à la 37ème semaine, je dépasse le nombre de
caractères autorisés pour une requête.
Il faudrait donc la modifier/simplifier.
Quelqu'un peux-t-il m'aider ?
SELECT "1" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut)
as
ABS , [An ?] as AN, AbsenceType_Nom AS TYPE
FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN
Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num)
ON
Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON
Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN
CarriereServiceFonctionMission ON Carriere.Carriere_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num)
ON Service.Service_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num
WHERE
(AbsenceType_Nom NOT LIKE "Récupération"
AND AbsenceType_Nom NOT LIKE "Congés Payés")
AND
(Absence_Date_Debut >= Carriere_Date_Entree
AND
(
Absence_Date_Fin < Carriere_Date_Sortie
OR Carriere_Date_Sortie is null
)
AND Year(Absence_Date_Debut) = [An ?]
)
AND
(
year(Carriere_Date_Entree) <= [An ?]
)
AND
(
Carriere_Date_Sortie is null
OR year(Carriere_Date_Sortie)>=[An ?]
)
AND
(
DatePart("ww",Absence_Date_Debut) = 1
OR DatePart("ww",Absence_Date_Fin) = 1
OR
(
DatePart("ww",Absence_Date_Debut) < 1
AND
DatePart("ww",Absence_Date_Fin) > 1
)
)
GROUP BY Service_Nom , AbsenceType_Nom
UNION ALL SELECT "2" AS SEMAINE, Service_Nom as SERVICE,
count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE
FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN
Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num)
ON
Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON
Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN
CarriereServiceFonctionMission ON Carriere.Carriere_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num)
ON Service.Service_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num
WHERE
(
AbsenceType_Nom NOT LIKE "Récupération"
AND AbsenceType_Nom NOT LIKE "Congés Payés"
)
AND
(
Absence_Date_Debut >= Carriere_Date_Entree
AND
(
Absence_Date_Fin < Carriere_Date_Sortie
OR Carriere_Date_Sortie is null
)
AND Year(Absence_Date_Debut) = [An ?]
)
AND
(
year(Carriere_Date_Entree) <= [An ?]
)
AND
(
Carriere_Date_Sortie is null
OR year(Carriere_Date_Sortie)>=[An ?]
)
AND
(
DatePart("ww",Absence_Date_Debut) = 2
OR DatePart("ww",Absence_Date_Fin) = 2
OR
(
DatePart("ww",Absence_Date_Debut) < 2
AND
DatePart("ww",Absence_Date_Fin) > 2
)
)
GROUP BY Service_Nom , AbsenceType_Nom
Tu peux essayer d'extraire la semaine de la date et faire un groupement sur cette semaine et sur le service
L'aide Access donne ceci " Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
"rafael" a écrit dans le message de news:
Bonjour à tous et à toutes ! ! !
Je dispose d'une base sous ACCESS 2003 sur laquelle je dois afficher le nombre d'absence par semaine et par service. J'ai commencé ma requête comme ci-dessous. Le problème est qu'arrivé à la 37ème semaine, je dépasse le nombre de caractères autorisés pour une requête. Il faudrait donc la modifier/simplifier. Quelqu'un peux-t-il m'aider ?
SELECT "1" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN CarriereServiceFonctionMission ON Carriere.Carriere_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num) ON Service.Service_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num WHERE (AbsenceType_Nom NOT LIKE "Récupération" AND AbsenceType_Nom NOT LIKE "Congés Payés") AND (Absence_Date_Debut >= Carriere_Date_Entree AND ( Absence_Date_Fin < Carriere_Date_Sortie OR Carriere_Date_Sortie is null ) AND Year(Absence_Date_Debut) = [An ?] ) AND ( year(Carriere_Date_Entree) <= [An ?] ) AND ( Carriere_Date_Sortie is null OR year(Carriere_Date_Sortie)>=[An ?] ) AND ( DatePart("ww",Absence_Date_Debut) = 1 OR DatePart("ww",Absence_Date_Fin) = 1 OR ( DatePart("ww",Absence_Date_Debut) < 1 AND DatePart("ww",Absence_Date_Fin) > 1 ) ) GROUP BY Service_Nom , AbsenceType_Nom
UNION ALL SELECT "2" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN CarriereServiceFonctionMission ON Carriere.Carriere_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num) ON Service.Service_Num > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num WHERE ( AbsenceType_Nom NOT LIKE "Récupération" AND AbsenceType_Nom NOT LIKE "Congés Payés" ) AND ( Absence_Date_Debut >= Carriere_Date_Entree AND ( Absence_Date_Fin < Carriere_Date_Sortie OR Carriere_Date_Sortie is null ) AND Year(Absence_Date_Debut) = [An ?] ) AND ( year(Carriere_Date_Entree) <= [An ?] ) AND ( Carriere_Date_Sortie is null OR year(Carriere_Date_Sortie)>=[An ?] ) AND ( DatePart("ww",Absence_Date_Debut) = 2 OR DatePart("ww",Absence_Date_Fin) = 2 OR ( DatePart("ww",Absence_Date_Debut) < 2 AND DatePart("ww",Absence_Date_Fin) > 2 ) ) GROUP BY Service_Nom , AbsenceType_Nom
Merci d'avance.
rafael
Merci pour ta réponse ! ! ! J'ai essayé ta solution mais je n'arrive pas à la faire. De plus, pour les absences durant plusieurs semaines (ex : de 3 à 7), il faut être sûr que les semaines intermédiaires soient comptabilisées. Est-on sûr que ta solution respecte ce critère ? ? ? Merci d'avance pout l'aide fournie
Tu peux essayer d'extraire la semaine de la date et faire un groupement sur cette semaine et sur le service
L'aide Access donne ceci " Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
"rafael" a écrit dans le message de news:
Bonjour à tous et à toutes ! ! !
Je dispose d'une base sous ACCESS 2003 sur laquelle je dois afficher le nombre d'absence par semaine et par service. J'ai commencé ma requête comme ci-dessous. Le problème est qu'arrivé à la 37ème semaine, je dépasse le nombre de caractères autorisés pour une requête. Il faudrait donc la modifier/simplifier. Quelqu'un peux-t-il m'aider ?
SELECT "1" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN CarriereServiceFonctionMission ON Carriere.Carriere_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num) ON Service.Service_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num WHERE (AbsenceType_Nom NOT LIKE "Récupération" AND AbsenceType_Nom NOT LIKE "Congés Payés") AND (Absence_Date_Debut >= Carriere_Date_Entree AND ( Absence_Date_Fin < Carriere_Date_Sortie OR Carriere_Date_Sortie is null ) AND Year(Absence_Date_Debut) = [An ?] ) AND ( year(Carriere_Date_Entree) <= [An ?] ) AND ( Carriere_Date_Sortie is null OR year(Carriere_Date_Sortie)>=[An ?] ) AND ( DatePart("ww",Absence_Date_Debut) = 1 OR DatePart("ww",Absence_Date_Fin) = 1 OR ( DatePart("ww",Absence_Date_Debut) < 1 AND DatePart("ww",Absence_Date_Fin) > 1 ) ) GROUP BY Service_Nom , AbsenceType_Nom
UNION ALL SELECT "2" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN CarriereServiceFonctionMission ON Carriere.Carriere_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num) ON Service.Service_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num WHERE ( AbsenceType_Nom NOT LIKE "Récupération" AND AbsenceType_Nom NOT LIKE "Congés Payés" ) AND ( Absence_Date_Debut >= Carriere_Date_Entree AND ( Absence_Date_Fin < Carriere_Date_Sortie OR Carriere_Date_Sortie is null ) AND Year(Absence_Date_Debut) = [An ?] ) AND ( year(Carriere_Date_Entree) <= [An ?] ) AND ( Carriere_Date_Sortie is null OR year(Carriere_Date_Sortie)>=[An ?] ) AND ( DatePart("ww",Absence_Date_Debut) = 2 OR DatePart("ww",Absence_Date_Fin) = 2 OR ( DatePart("ww",Absence_Date_Debut) < 2 AND DatePart("ww",Absence_Date_Fin) > 2 ) ) GROUP BY Service_Nom , AbsenceType_Nom
Merci d'avance.
Merci pour ta réponse ! ! !
J'ai essayé ta solution mais je n'arrive pas à la faire.
De plus, pour les absences durant plusieurs semaines (ex : de 3 à 7), il
faut être sûr que les semaines intermédiaires soient comptabilisées.
Est-on sûr que ta solution respecte ce critère ? ? ?
Merci d'avance pout l'aide fournie
Tu peux essayer d'extraire la semaine de la date et faire un groupement sur
cette semaine et sur le service
L'aide Access donne ceci "
Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
"rafael" <rafael@discussions.microsoft.com> a écrit dans le message de news:
5A3C1C3C-D45B-4424-BD77-E7F22DC88CFF@microsoft.com...
Bonjour à tous et à toutes ! ! !
Je dispose d'une base sous ACCESS 2003 sur laquelle je dois afficher
le
nombre d'absence par semaine et par service.
J'ai commencé ma requête comme ci-dessous.
Le problème est qu'arrivé à la 37ème semaine, je dépasse le nombre de
caractères autorisés pour une requête.
Il faudrait donc la modifier/simplifier.
Quelqu'un peux-t-il m'aider ?
SELECT "1" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut)
as
ABS , [An ?] as AN, AbsenceType_Nom AS TYPE
FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN
Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num)
ON
Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON
Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN
CarriereServiceFonctionMission ON Carriere.Carriere_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num)
ON Service.Service_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num
WHERE
(AbsenceType_Nom NOT LIKE "Récupération"
AND AbsenceType_Nom NOT LIKE "Congés Payés")
AND
(Absence_Date_Debut >= Carriere_Date_Entree
AND
(
Absence_Date_Fin < Carriere_Date_Sortie
OR Carriere_Date_Sortie is null
)
AND Year(Absence_Date_Debut) = [An ?]
)
AND
(
year(Carriere_Date_Entree) <= [An ?]
)
AND
(
Carriere_Date_Sortie is null
OR year(Carriere_Date_Sortie)>=[An ?]
)
AND
(
DatePart("ww",Absence_Date_Debut) = 1
OR DatePart("ww",Absence_Date_Fin) = 1
OR
(
DatePart("ww",Absence_Date_Debut) < 1
AND
DatePart("ww",Absence_Date_Fin) > 1
)
)
GROUP BY Service_Nom , AbsenceType_Nom
UNION ALL SELECT "2" AS SEMAINE, Service_Nom as SERVICE,
count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE
FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN
Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num)
ON
Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON
Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN
CarriereServiceFonctionMission ON Carriere.Carriere_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num)
ON Service.Service_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num
WHERE
(
AbsenceType_Nom NOT LIKE "Récupération"
AND AbsenceType_Nom NOT LIKE "Congés Payés"
)
AND
(
Absence_Date_Debut >= Carriere_Date_Entree
AND
(
Absence_Date_Fin < Carriere_Date_Sortie
OR Carriere_Date_Sortie is null
)
AND Year(Absence_Date_Debut) = [An ?]
)
AND
(
year(Carriere_Date_Entree) <= [An ?]
)
AND
(
Carriere_Date_Sortie is null
OR year(Carriere_Date_Sortie)>=[An ?]
)
AND
(
DatePart("ww",Absence_Date_Debut) = 2
OR DatePart("ww",Absence_Date_Fin) = 2
OR
(
DatePart("ww",Absence_Date_Debut) < 2
AND
DatePart("ww",Absence_Date_Fin) > 2
)
)
GROUP BY Service_Nom , AbsenceType_Nom
Merci pour ta réponse ! ! ! J'ai essayé ta solution mais je n'arrive pas à la faire. De plus, pour les absences durant plusieurs semaines (ex : de 3 à 7), il faut être sûr que les semaines intermédiaires soient comptabilisées. Est-on sûr que ta solution respecte ce critère ? ? ? Merci d'avance pout l'aide fournie
Tu peux essayer d'extraire la semaine de la date et faire un groupement sur cette semaine et sur le service
L'aide Access donne ceci " Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
"rafael" a écrit dans le message de news:
Bonjour à tous et à toutes ! ! !
Je dispose d'une base sous ACCESS 2003 sur laquelle je dois afficher le nombre d'absence par semaine et par service. J'ai commencé ma requête comme ci-dessous. Le problème est qu'arrivé à la 37ème semaine, je dépasse le nombre de caractères autorisés pour une requête. Il faudrait donc la modifier/simplifier. Quelqu'un peux-t-il m'aider ?
SELECT "1" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN CarriereServiceFonctionMission ON Carriere.Carriere_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num) ON Service.Service_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num WHERE (AbsenceType_Nom NOT LIKE "Récupération" AND AbsenceType_Nom NOT LIKE "Congés Payés") AND (Absence_Date_Debut >= Carriere_Date_Entree AND ( Absence_Date_Fin < Carriere_Date_Sortie OR Carriere_Date_Sortie is null ) AND Year(Absence_Date_Debut) = [An ?] ) AND ( year(Carriere_Date_Entree) <= [An ?] ) AND ( Carriere_Date_Sortie is null OR year(Carriere_Date_Sortie)>=[An ?] ) AND ( DatePart("ww",Absence_Date_Debut) = 1 OR DatePart("ww",Absence_Date_Fin) = 1 OR ( DatePart("ww",Absence_Date_Debut) < 1 AND DatePart("ww",Absence_Date_Fin) > 1 ) ) GROUP BY Service_Nom , AbsenceType_Nom
UNION ALL SELECT "2" AS SEMAINE, Service_Nom as SERVICE, count(Absence_Date_Debut) as ABS , [An ?] as AN, AbsenceType_Nom AS TYPE FROM Service INNER JOIN (((Employe INNER JOIN (AbsenceType INNER JOIN Absence ON AbsenceType.AbsenceType_Num = Absence.Absence_Absence_Type_Num) ON Employe.Employe_Num = Absence.Absence_Num) INNER JOIN Carriere ON Employe.Employe_Num = Carriere.Carriere_Employe_Num) INNER JOIN CarriereServiceFonctionMission ON Carriere.Carriere_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Carriere_Num) ON Service.Service_Num > > CarriereServiceFonctionMission.CarriereServiceFonctionMission_Service_Num WHERE ( AbsenceType_Nom NOT LIKE "Récupération" AND AbsenceType_Nom NOT LIKE "Congés Payés" ) AND ( Absence_Date_Debut >= Carriere_Date_Entree AND ( Absence_Date_Fin < Carriere_Date_Sortie OR Carriere_Date_Sortie is null ) AND Year(Absence_Date_Debut) = [An ?] ) AND ( year(Carriere_Date_Entree) <= [An ?] ) AND ( Carriere_Date_Sortie is null OR year(Carriere_Date_Sortie)>=[An ?] ) AND ( DatePart("ww",Absence_Date_Debut) = 2 OR DatePart("ww",Absence_Date_Fin) = 2 OR ( DatePart("ww",Absence_Date_Debut) < 2 AND DatePart("ww",Absence_Date_Fin) > 2 ) ) GROUP BY Service_Nom , AbsenceType_Nom