OVH Cloud OVH Cloud

dépassement du NBRE de caractères dans une requête

2 réponses
Avatar
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

Merci d'avance.

2 réponses

Avatar
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.


Avatar
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.