create table #myTable(
empName varchar(20)
,inTime smalldatetime
,outTime smallDatetime
)
INSERT #myTable VALUES ('johnDoe', '4/1/04 9 AM','4/1/04 11:30 AM')
INSERT #myTable VALUES ('johnDoe', '4/1/04 12:30 PM','4/1/04 5:00 PM')
ALTER PROC a_timeTest AS
SET NOCOUNT ON
create table #timeCount(
h8 float
, h9 float
, h10 float
, h11 float
, h12 float
, h13 float
, h14 float
, h15 float
, h16 float
)
INSERT #timeCount VALUES(0,0,0,0,0,0,0,0,0)
-- need an ID seed to count through table
CREATE TABLE #record (
empName varchar(20)
,inTime smalldatetime
,outTime smallDatetime
,idSeed INT IDENTITY
)
DECLARE @rowNum INT, @maxRow INT, @sHour INT, @eHour INT, @sMin float, @eMin float
INSERT #record SELECT * FROM #myTable
SELECT @maxRow = max(idSeed) FROM #record
SELECT @rowNum = 1
WHILE @rowNum <= @maxRow
BEGIN
SELECT @sHour = datePart(hh,inTime)
,@eHour = datePart(hh,outTime)
,@sMin = datePart(n,inTime)
,@eMin = datePart(n,outTime)
FROM #record WHERE idSeed = @rowNum
IF (@sHour < 8 OR (@sHour = 8 AND @sMin = 0)) AND @eHour > 8 UPDATE #timeCount SET h8 = h8 + 1
IF (@sHour < 9 OR (@sHour = 9 AND @sMin = 0)) AND @eHour > 9 UPDATE #timeCount SET h9 = h9 + 1
IF (@sHour < 10 OR (@sHour = 10 AND @sMin = 0)) AND @eHour > 10 UPDATE #timeCount SET h10 = h10 + 1
IF (@sHour < 11 OR (@sHour = 11 AND @sMin = 0)) AND @eHour > 11 UPDATE #timeCount SET h11 = h11 + 1
IF (@sHour < 12 OR (@sHour = 12 AND @sMin = 0)) AND @eHour > 12 UPDATE #timeCount SET h12 = h12 + 1
IF (@sHour < 13 OR (@sHour = 13 AND @sMin = 0)) AND @eHour > 13 UPDATE #timeCount SET h13 = h13 + 1
IF (@sHour < 14 OR (@sHour = 14 AND @sMin = 0)) AND @eHour > 14 UPDATE #timeCount SET h14 = h14 + 1
IF (@sHour < 15 OR (@sHour = 15 AND @sMin = 0)) AND @eHour > 15 UPDATE #timeCount SET h15 = h15 + 1
IF (@sHour < 16 OR (@sHour = 16 AND @sMin = 0)) AND @eHour > 16 UPDATE #timeCount SET h16 = h16 + 1
-- now you have to handle the hours where minutes count...
IF (@sHour = 8 AND @sMin > 0) AND @eHour > 8 UPDATE #timeCount SET h8 = h8 + (@sMin / 60)
IF @sHour = 8 AND @eHour = 8 UPDATE #timeCount SET h8 = h8 + ((@eMin - @sMin) / 60)
IF @eHour = 8 AND @eMin > 0 UPDATE #timeCount SET h8 = h8 + (@eMin/60)
IF (@sHour = 9 AND @sMin > 0) AND @eHour > 9 UPDATE #timeCount SET h9 = h9 + (@sMin / 60)
IF @sHour = 9 AND @eHour = 9 UPDATE #timeCount SET h9 = h9 + ((@eMin - @sMin) / 60)
IF @eHour = 9 AND @eMin > 0 UPDATE #timeCount SET h9 = h9 + (@eMin/60)
IF (@sHour = 10 AND @sMin > 0) AND @eHour > 10 UPDATE #timeCount SET h10 = h10 + (@sMin / 60)
IF @sHour = 10 AND @eHour = 10 UPDATE #timeCount SET h10 = h10 + ((@eMin - @sMin) / 60)
IF @eHour = 10 AND @eMin > 0 UPDATE #timeCount SET h10 = h10 + (@eMin/60)
IF (@sHour = 11 AND @sMin > 0) AND @eHour > 11 UPDATE #timeCount SET h11 = h11 + (@sMin / 60)
IF @sHour = 11 AND @eHour = 11 UPDATE #timeCount SET h11 = h11 + ((@eMin - @sMin) / 60)
IF @eHour = 11 AND @eMin > 0 UPDATE #timeCount SET h11 = h11 + (@eMin/60)
IF (@sHour = 12 AND @sMin > 0) AND @eHour > 12 UPDATE #timeCount SET h12 = h12 + (@sMin / 60)
IF @sHour = 12 AND @eHour = 12 UPDATE #timeCount SET h12 = h12 + ((@eMin - @sMin) / 60)
IF @eHour = 12 AND @eMin > 0 UPDATE #timeCount SET h12 = h12 + (@eMin/60)
IF (@sHour = 13 AND @sMin > 0) AND @eHour > 13 UPDATE #timeCount SET h13 = h13 + (@sMin / 60)
IF @sHour = 13 AND @eHour = 13 UPDATE #timeCount SET h13 = h13 + ((@eMin - @sMin) / 60)
IF @eHour = 13 AND @eMin > 0 UPDATE #timeCount SET h13 = h13 + (@eMin/60)
IF (@sHour = 14 AND @sMin > 0) AND @eHour > 14 UPDATE #timeCount SET h14 = h14 + (@sMin / 60)
IF @sHour = 14 AND @eHour = 14 UPDATE #timeCount SET h14 = h14 + ((@eMin - @sMin) / 60)
IF @eHour = 14 AND @eMin > 0 UPDATE #timeCount SET h14 = h14 + (@eMin/60)
IF (@sHour = 15 AND @sMin > 0) AND @eHour > 15 UPDATE #timeCount SET h15 = h15 + (@sMin / 60)
IF @sHour = 15 AND @eHour = 15 UPDATE #timeCount SET h15 = h15 + ((@eMin - @sMin) / 60)
IF @eHour = 15 AND @eMin > 0 UPDATE #timeCount SET h15 = h15 + (@eMin/60)
IF (@sHour = 16 AND @sMin > 0) AND @eHour > 16 UPDATE #timeCount SET h16 = h16 + (@sMin / 60)
IF @sHour = 16 AND @eHour = 16 UPDATE #timeCount SET h16 = h16 + ((@eMin - @sMin) / 60)
IF @eHour = 16 AND @eMin > 0 UPDATE #timeCount SET h16 = h16 + (@eMin/60)
SELECT @rowNum = @rowNum + 1
END
SELECT * FROM #timeCount
drop table #timeCount
drop table #record
GO
EXEC a_timetest