add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE T(
EmployeeID INT,
[Date] Date,
Login DATETIME,
Logout DATETIME
);



INSERT INTO T VALUES (123,'10/31/2018','10/31/2018 8:30','10/31/2018 10:35');
INSERT INTO T VALUES (234,'10/31/2018','10/31/2018 9:30','10/31/2018 11:37');
INSERT INTO T VALUES (345,'10/31/2018','10/31/2018 9:00','10/31/2018 11:09');

;WITH CTE AS (
SELECT [Date],Login,Logout
FROM T
UNION ALL
SELECT [Date],DATEADD(mi, 30, Login) ,Logout
FROM CTE
WHERE DATEADD(mi, 30, Login) < Logout
),CelanderCte AS(
SELECT *, CAST(Login AS TIME) LoginTitme
FROM CTE
)


SELECT convert(char(10), [Date], 101) 'DATE',
COUNT(CASE WHEN LoginTitme >= '8:30' AND LoginTitme < '9:00' THEN 1 END) '8:30:00 AM',
COUNT(CASE WHEN LoginTitme >= '9:00' AND LoginTitme < '9:30' THEN 1 END) '9:00:00 AM',
COUNT(CASE WHEN LoginTitme >= '9:30' AND LoginTitme < '10:00' THEN 1 END) '9:30:00 AM',
COUNT(CASE WHEN LoginTitme >= '10:00' AND LoginTitme < '10:30' THEN 1 END) '10:00:00 AM',
COUNT(CASE WHEN LoginTitme >= '10:30' AND LoginTitme <'11:00' THEN 1 END) '10:30:00 AM',
COUNT(CASE WHEN LoginTitme >= '11:00' AND LoginTitme <'11:30' THEN 1 END) '11:00:00 AM'
FROM CelanderCte
GROUP BY CONVERT(char(10), [Date],101)
DATE 8:30:00 AM 9:00:00 AM 9:30:00 AM 10:00:00 AM 10:30:00 AM 11:00:00 AM
10/31/2018 1 2 3 3 3 2
Warning: Null value is eliminated by an aggregate or other SET operation.