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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| CREATE TABLE TbEmploye
(
IDEmploye INT IDENTITY CONSTRAINT PK_TbEmploye PRIMARY KEY,
nomEmploye VARCHAR(20)
)
GO
INSERT INTO dbo.TbEmploye VALUES ('ElSuket')
INSERT INTO dbo.TbEmploye VALUES ('18carats')
GO
CREATE TABLE TbTempsDeTravail
(
IDEmploye INT NOT NULL CONSTRAINT FK_TbTempsDeTravail_IDEmploye FOREIGN KEY (IDEmploye) REFERENCES dbo.TbEmploye,
Date DATETIME NOT NULL,
TempsDeTravail_Secondes INT
)
GO
-- Population de la table TbEmploye pour ElSuket
WITH
CTE_TEMPS_TRAVAIL_ELSUKET AS
(
SELECT CAST(FLOOR(CAST(DATEADD(day, -DATEPART(weekday, GETDATE()) + 1, GETDATE()) AS FLOAT)) AS DATETIME) Jour, -- Lundi dernier
8 * 3600 Duree
UNION ALL
SELECT DATEADD(day, 1, Jour),
Duree + 1800
FROM CTE_TEMPS_TRAVAIL_ELSUKET
WHERE Jour < DATEADD(day, 4 - DATEPART(weekday, GETDATE()), GETDATE()) -- Vendredi prochain
)
INSERT INTO TbTempsDeTravail
SELECT 1, Jour, Duree
FROM CTE_TEMPS_TRAVAIL_ELSUKET
GO
-- Population de la table TbEmploye pour 18Carats
WITH
CTE_TEMPS_TRAVAIL_18CARATS AS
(
SELECT CAST(FLOOR(CAST(DATEADD(day, -DATEPART(weekday, GETDATE()) + 1, GETDATE()) AS FLOAT)) AS DATETIME) Jour, -- Lundi dernier
8 * 3600 Duree
UNION ALL
SELECT DATEADD(day, 1, Jour),
Duree + 3600 -- Vous travaillez plus que moi !
FROM CTE_TEMPS_TRAVAIL_18CARATS
WHERE Jour < DATEADD(day, 4 - DATEPART(weekday, GETDATE()), GETDATE()) -- Vendredi prochain
)
INSERT INTO TbTempsDeTravail
SELECT 2, Jour, Duree
FROM CTE_TEMPS_TRAVAIL_18CARATS
GO
-- Combien de temps avons-nous travaillé cette semaine ?
WITH
CTE_TempsDeTravail AS
(
SELECT IDEmploye, SUM(TempsDeTravail_Secondes) TempsDeTravailTotal
FROM dbo.TbTempsDeTravail
WHERE DATEPART(week, Date) = DATEPART(week, GETDATE())
GROUP BY IDEmploye
)
SELECT nomEmploye,
CAST(TempsDeTravailTotal / 3600 AS VARCHAR) + ':' +
CASE
WHEN ((TempsDeTravailTotal / 60) % 60) < 10 THEN '0' + CAST((TempsDeTravailTotal / 60) % 60 AS VARCHAR)
ELSE CAST((TempsDeTravailTotal / 60) % 60 AS VARCHAR)
END + ':' +
CASE
WHEN ((TempsDeTravailTotal % 86400) % 60) < 10 THEN '0' + CAST((TempsDeTravailTotal % 86400) % 60 AS VARCHAR)
ELSE CAST((TempsDeTravailTotal % 86400) % 60 AS VARCHAR)
END AS TempsDeTravailHH_MM_SS
FROM dbo.TbEmploye E
JOIN CTE_TempsDeTravail T ON T.IDEmploye = E.IDEmploye |
Partager