Bonjour à tous,
Pour commencer voici la structure des tables concerné par la requête que je cherche à élaborer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 CREATE TABLE [dbo].[Operateur]( Code [nvarchar](10) NOT NULL, [Nom] [varchar](50) NOT NULL, [Prenom] [varchar](50) NOT NULL, [Actif] [bit] NOT NULL, [IdPlanning] [int] NOT NULL, [equipe] [tinyint] NOT NULL, CONSTRAINT [PK_Operateur] PRIMARY KEY CLUSTERED ( Code ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] ALTER TABLE [dbo].[Operateur] WITH CHECK ADD CONSTRAINT [FK_Operateur_Planning] FOREIGN KEY([IdPlanning]) REFERENCES [dbo].[Planning] ([ID]) ALTER TABLE [dbo].[Operateur] CHECK CONSTRAINT [FK_Operateur_Planning]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE [dbo].[Planning]( [ID] [int] IDENTITY(1,1) NOT NULL, [Nom] [varchar](10) NOT NULL, [Tolerance] [tinyint] NOT NULL CONSTRAINT [DF_Planning_Tolerance] DEFAULT ((0)), CONSTRAINT [PK_Planning] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 CREATE TABLE [dbo].[PlanningLignes]( [ID] [int] IDENTITY(1,1) NOT NULL, [ID_PLANNING] [int] NOT NULL, [Jour] [char](1) NOT NULL, [Debut] [time](7) NOT NULL, [Fin] [time](7) NOT NULL, [ReposDebut] [time](7) NULL, [ReposFin] [time](7) NULL, CONSTRAINT [PK_PlanningLignes] PRIMARY KEY CLUSTERED ( [ID_PLANNING] ASC, [Jour] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] ALTER TABLE [dbo].[PlanningLignes] WITH CHECK ADD CONSTRAINT [FK_PlanningLignes_Planning] FOREIGN KEY([ID_PLANNING]) REFERENCES [dbo].[Planning] ([ID]) ALTER TABLE [dbo].[PlanningLignes] CHECK CONSTRAINT [FK_PlanningLignes_Planning]J'ai des opérateurs lié à un planning, chaque planning à donc une ligne par jour de la semaine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 CREATE TABLE [dbo].[PointageMO]( [id] [int] IDENTITY(1,1) NOT NULL, [CodeOperateur] [nvarchar](10) NOT NULL, [CodeActivity] [nvarchar](10) NOT NULL, [CodeLancement] [nvarchar](10) NULL, [DateHeure] [datetime] NOT NULL, [Duree] [int] NOT NULL, [Borne] [nvarchar](25) NOT NULL, [Cloture] [bit] NOT NULL CONSTRAINT [DF_PointageMO_Cloture] DEFAULT ((0)), CONSTRAINT [PK_PointageMO] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] ALTER TABLE [dbo].[PointageMO] WITH CHECK ADD CONSTRAINT [FK_PointageMO_Activity] FOREIGN KEY([CodeActivity]) REFERENCES [dbo].[Activity] (Code) ALTER TABLE [dbo].[PointageMO] CHECK CONSTRAINT [FK_PointageMO_Activity] ALTER TABLE [dbo].[PointageMO] WITH CHECK ADD CONSTRAINT [FK_PointageMO_Lancement] FOREIGN KEY([CodeLancement]) REFERENCES [dbo].[Lancement] (Code) ALTER TABLE [dbo].[PointageMO] CHECK CONSTRAINT [FK_PointageMO_Lancement] ALTER TABLE [dbo].[PointageMO] WITH CHECK ADD CONSTRAINT [FK_PointageMO_Operateur] FOREIGN KEY([CodeOperateur]) REFERENCES [dbo].[Operateur] (Code) ALTER TABLE [dbo].[PointageMO] CHECK CONSTRAINT [FK_PointageMO_Operateur]
Les opérateurs pointent plusieurs fois au cours de la journée et ce que je veux c'est faire une requête qui me donne la liste des pointages avec début et fin.
Mais également gérer la pause de milieu de journée.
C'est à dire par exemple, l'opérateur 1 à pour planning :
07h30 - 12h20 et 13h05 - 17h00
Il pointe à 07h30
Il pointe à 10h50
Il pointe à 11h48
Il pointe à 13h36
Il pointe à 15h53
Il pointe à 16h44
Je veux sortir dans ma requête :
07h30 - 10h50
10h50 - 11h48
11h48 - 12h20
13h05 - 13h36
13h36 - 15h53
15h53 - 16h44
16h44 - 17h00
Je n'ai pas eu de soucis pour faire le lien sur la table PointageMO elle même avec cette requête :
Par contre je bloque sur l'intégration en plus de la table PlanningLignes pour gérer la pause milieu de journée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT * FROM PointageMO pmo OUTER APPLY ( SELECT TOP 1 CodeOperateur, DateHeure FROM PointageMO pmoFin WHERE pmoFin.CodeOperateur = pmo.CodeOperateur AND CAST(pmoFin.DateHeure AS DATE) = CAST(pmo.DateHeure AS DATE) AND pmoFin.DateHeure > pmo.DateHeure ) pmoFin ORDER BY CAST(pmo.DateHeure AS DATE), pmo.CodeOperateur, CAST(pmo.DateHeure AS TIME)
Avez vous une idée
Merci d'avance.
PS : Si besoin de jeu de test, j'en mettrai un dispo.
Partager