I am trying to create a stored procedure that adds lunch hours based on SUM(TotalTime). My dilemma is on the records that are duplicates. It adds lunch twice. See the screenshot below. I would like it to add in the lunch only once per day per employee based on the total hours worked. Here is what I have so far.
CREATE TABLE TimeCards
(
[Counter] [int] IDENTITY(1,1) NOT NULL,
EmployeeID nvarchar(50),
Date DateTime,
Lunch decimal(10,2),
TotalTime decimal(10,2)
)
INSERT INTO TimeCards (EmployeeID, Date, Lunch, TotalTime)
VALUES ('1001', '2021-02-04 00:00:00.000', Null, 8)
, ('136', '2021-02-04 00:00:00.000', Null, 4)
, ('136', '2021-02-04 00:00:00.000', Null, 4)
, ('418', '2021-02-04 00:00:00.000', Null, 5)
, ('418', '2021-02-04 00:00:00.000', Null, 5)
, ('511', '2021-02-04 00:00:00.000', Null, 5)
, ('511', '2021-02-04 00:00:00.000', Null, 6)
UPDATE TimeCards
SET Lunch = CASE
WHEN SUMTotalTime BETWEEN 5.501 AND 11 THEN .5
WHEN SUMTotalTime BETWEEN 11.01 AND 16 THEN 1
WHEN SUMTotalTime >= 16.01 THEN 1.5
END
FROM
(SELECT
tc.EmployeeID, Date, MAX(totaltime) AS totaltime,
SUM(TotalTime) AS SUMTotalTime
FROM
TimeCards tc
GROUP BY
tc.EmployeeID, Date
HAVING
SUM(Totaltime) > 5.5) grouped
WHERE
TimeCards.totaltime = grouped.totaltime
AND TimeCards.Date = grouped.Date
AND TimeCards.EmployeeID = grouped.EmployeeID
AND grouped.SUMTotalTime > 5.5
AND Lunch IS NULL
