OVH Cloud OVH Cloud

Comment extraire les jours d'absence des salariés ?

4 réponses
Avatar
TF
Bonjour,
Dans une table traite le salarié et les jours du mois en cours et une code
d'activité (présence, absence, ...).
A l'aide d'une fonction ou d'une procédure stockée, comment pourrais-je
extraire les intervalles de l'activité du salarié ?

par exemple :
Présent : du 1er au 5
WE : du 6 au 7
Stage : du 8 au 15
etc ...

Ce que je suis en train de faire en VBA :
1 - parcourir l'enregistrement du salarié et le mois concerné, comparer le
jour courant et le jour suivant, s'il y a un changement d'activité ...
Merci pour une aide

4 réponses

Avatar
Fred BROUARD
En principe éclater tous les jours existant et préciser par un booléen
si présent ou pas. Dès lors le calcul est simple :

SELECT ... COUNT(ColJour)
FROM ...
WHERE PRESENT = 1

A +

TF a écrit:
Bonjour,
Dans une table traite le salarié et les jours du mois en cours et une code
d'activité (présence, absence, ...).
A l'aide d'une fonction ou d'une procédure stockée, comment pourrais-je
extraire les intervalles de l'activité du salarié ?

par exemple :
Présent : du 1er au 5
WE : du 6 au 7
Stage : du 8 au 15
etc ...

Ce que je suis en train de faire en VBA :
1 - parcourir l'enregistrement du salarié et le mois concerné, comparer le
jour courant et le jour suivant, s'il y a un changement d'activité ...
Merci pour une aide





--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
TF
Bonjour,
Merci pour votre réponse, mais celà ne peut pas fonctionner, car je souhaite
extraire les périodes de présence ou des autres activités, mais pas le
nombre de jours de présence, voilà mon exemple :
la personne est :
présente de 1 au 5
absente de 8 au 12
présente de 15 au 18
stage le 19
.......
.......

Bonne journée
"Fred BROUARD" a écrit dans le message de
news:
En principe éclater tous les jours existant et préciser par un booléen
si présent ou pas. Dès lors le calcul est simple :

SELECT ... COUNT(ColJour)
FROM ...
WHERE PRESENT = 1

A +

TF a écrit:
> Bonjour,
> Dans une table traite le salarié et les jours du mois en cours et une


code
> d'activité (présence, absence, ...).
> A l'aide d'une fonction ou d'une procédure stockée, comment pourrais-je
> extraire les intervalles de l'activité du salarié ?
>
> par exemple :
> Présent : du 1er au 5
> WE : du 6 au 7
> Stage : du 8 au 15
> etc ...
>
> Ce que je suis en train de faire en VBA :
> 1 - parcourir l'enregistrement du salarié et le mois concerné, comparer


le
> jour courant et le jour suivant, s'il y a un changement d'activité ...
> Merci pour une aide
>
>

--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************



Avatar
Fred BROUARD
donc comme je l'ai dit, éclater toutes les dates :

date action
1 p
2 p
3 p
4 p
5 p
6
7
8 a

...

18 p
19 s


SELECT COUNT(date) as NOMBRE, action
FROM ...
GROUP BY action

NOMBRE action
4 NULL
9 p
5 a
1 s

s => stage
a => absent
p => présent
NULL => on ne sait pas

A lire :
http://sqlpro.developpez.com/Planning/SQL_PLN.html

A +




TF a écrit:
Bonjour,
Merci pour votre réponse, mais celà ne peut pas fonctionner, car je souhaite
extraire les périodes de présence ou des autres activités, mais pas le
nombre de jours de présence, voilà mon exemple :
la personne est :
présente de 1 au 5
absente de 8 au 12
présente de 15 au 18
stage le 19
.......
.......

Bonne journée
"Fred BROUARD" a écrit dans le message de
news:

En principe éclater tous les jours existant et préciser par un booléen
si présent ou pas. Dès lors le calcul est simple :

SELECT ... COUNT(ColJour)
FROM ...
WHERE PRESENT = 1

A +

TF a écrit:

Bonjour,
Dans une table traite le salarié et les jours du mois en cours et une





code

d'activité (présence, absence, ...).
A l'aide d'une fonction ou d'une procédure stockée, comment pourrais-je
extraire les intervalles de l'activité du salarié ?

par exemple :
Présent : du 1er au 5
WE : du 6 au 7
Stage : du 8 au 15
etc ...

Ce que je suis en train de faire en VBA :
1 - parcourir l'enregistrement du salarié et le mois concerné, comparer





le

jour courant et le jour suivant, s'il y a un changement d'activité ...
Merci pour une aide





--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************









--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
Fred BROUARD
CREATE TABLE MyTable
(MyDate INT,
action CHAR(1))

INSERT INTO MyTable VALUES (0, NULL)
INSERT INTO MyTable VALUES (1, 'p')
INSERT INTO MyTable VALUES (2, 'p')
INSERT INTO MyTable VALUES (3, 'p')
INSERT INTO MyTable VALUES (4, 'p')
INSERT INTO MyTable VALUES (5, 'p')
INSERT INTO MyTable VALUES (6, NULL)
INSERT INTO MyTable VALUES (7, NULL)
INSERT INTO MyTable VALUES (8, 'a')
INSERT INTO MyTable VALUES (9, 'a')
INSERT INTO MyTable VALUES (10, 'a')
INSERT INTO MyTable VALUES (11, 'a')
INSERT INTO MyTable VALUES (12, 'a')
INSERT INTO MyTable VALUES (13, NULL)
INSERT INTO MyTable VALUES (14, NULL)
INSERT INTO MyTable VALUES (15, 'p')
INSERT INTO MyTable VALUES (16, 'p')
INSERT INTO MyTable VALUES (17, 'p')
INSERT INTO MyTable VALUES (18, 'p')
INSERT INTO MyTable VALUES (19, 's')
INSERT INTO MyTable VALUES (20, NULL)


SELECT T1.*, 'FIN ' AS TypeAction
FROM MyTable T1
INNER JOIN MyTable T2
ON T1.MyDate +1 = T2.MyDate
AND COALESCE(T1.action,'') <> COALESCE(T2.action, '')
UNION
SELECT T1.*, 'DEBUT' AS TypeAction
FROM MyTable T1
INNER JOIN MyTable T2
ON T1.MyDate -1 = T2.MyDate
AND COALESCE(T1.action,'') <> COALESCE(T2.action, '')

Order By 1

MyDate action TypeAction
----------- ------ ----------
0 NULL FIN
1 p DEBUT
5 p FIN
6 NULL DEBUT
7 NULL FIN
8 a DEBUT
12 a FIN
13 NULL DEBUT
14 NULL FIN
15 p DEBUT
18 p FIN
19 s DEBUT
19 s FIN
20 NULL DEBUT

(14 ligne(s) affectée(s))



Fred BROUARD a écrit:
donc comme je l'ai dit, éclater toutes les dates :

date action
1 p
2 p
3 p
4 p
5 p
6
7
8 a

...

18 p
19 s


SELECT COUNT(date) as NOMBRE, action
FROM ...
GROUP BY action

NOMBRE action
4 NULL
9 p
5 a
1 s

s => stage
a => absent
p => présent
NULL => on ne sait pas

A lire :
http://sqlpro.developpez.com/Planning/SQL_PLN.html

A +




TF a écrit:

Bonjour,
Merci pour votre réponse, mais celà ne peut pas fonctionner, car je
souhaite
extraire les périodes de présence ou des autres activités, mais pas le
nombre de jours de présence, voilà mon exemple :
la personne est :
présente de 1 au 5
absente de 8 au 12
présente de 15 au 18
stage le 19
.......
.......

Bonne journée
"Fred BROUARD" a écrit dans le message de
news:

En principe éclater tous les jours existant et préciser par un booléen
si présent ou pas. Dès lors le calcul est simple :

SELECT ... COUNT(ColJour)
FROM ...
WHERE PRESENT = 1

A +

TF a écrit:

Bonjour,
Dans une table traite le salarié et les jours du mois en cours et une






code

d'activité (présence, absence, ...).
A l'aide d'une fonction ou d'une procédure stockée, comment pourrais-je
extraire les intervalles de l'activité du salarié ?

par exemple :
Présent : du 1er au 5
WE : du 6 au 7
Stage : du 8 au 15
etc ...

Ce que je suis en train de faire en VBA :
1 - parcourir l'enregistrement du salarié et le mois concerné,
comparer






le

jour courant et le jour suivant, s'il y a un changement d'activité ...
Merci pour une aide





--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************












--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************