ユーザーログインログアウトの詳細を保存するために使用したこのテーブルがあります。 私は開始曜日のデータを照会し、毎週データを取得したい場合は、 たとえば、2016年3月2016日から2016年3月20日に開始し、週の開始日が水曜日の場合は、毎週すべての従業員データが必要です 3月2日〜 3月9〜15 3月16〜22 各従業員もし誰かがその週に40時間以上働くなら、余分な時間も計算する必要があります。Sql get Employee開始日(例:曜日、月曜日、火曜日など)の週の作業時間
CREATE TABLE #tempWeekdatbefore
(EmployeeId BIGINT, LoginTime DATETIME, LogOutTime DATETIME)
INSERT INTO #tempWeekdatbefore (EmployeeId,LoginTime,LogOutTime)
Values
(83 ,'2016-03-09 06:55:22.000', '2016-03-09 14:29:11.000'),
(98 ,'2016-03-09 07:04:22.000', '2016-03-09 11:53:12.000'),
(84 ,'2016-03-09 07:07:06.000', '2016-03-09 13:39:03.000'),
(136 ,'2016-03-09 07:29:14.000', '2016-03-09 13:20:24.000'),
(420 ,'2016-03-09 07:33:48.000', '2016-03-09 11:42:52.000'),
(101102 ,'2016-03-09 07:49:25.000', '2016-03-09 11:42:53.000'),
(425 ,'2016-03-09 07:49:45.000', '2016-03-09 12:47:46.000'),
(100750 ,'2016-03-09 07:56:26.000', '2016-03-09 12:43:16.000'),
(90 ,'2016-03-09 08:03:51.000', '2016-03-09 11:19:38.000'),
(78 ,'2016-03-09 08:52:09.000', '2016-03-09 13:26:56.000'),
(89 ,'2016-03-09 09:06:57.000', '2016-03-09 13:41:30.000'),
(60600 ,'2016-03-09 09:31:17.000', '2016-03-09 17:13:48.000'),
(219 ,'2016-03-09 11:50:51.000', '2016-03-09 15:07:42.000'),
(90 ,'2016-03-09 11:54:38.000', '2016-03-09 16:47:30.000'),
(420 ,'2016-03-09 12:12:33.000', '2016-03-09 14:53:59.000'),
(101102 ,'2016-03-09 12:12:42.000', '2016-03-09 16:43:33.000'),
(337 ,'2016-03-09 12:17:22.000', '2016-03-09 15:54:39.000'),
(98 ,'2016-03-09 12:22:27.000', '2016-03-09 16:39:59.000'),
(425 ,'2016-03-09 13:08:09.000', '2016-03-09 17:00:16.000'),
(100750 ,'2016-03-09 13:09:32.000', '2016-03-09 15:00:00.000'),
(136 ,'2016-03-09 13:32:12.000', '2016-03-09 16:00:00.000'),
(84 ,'2016-03-09 13:50:37.000', '2016-03-09 16:23:04.000'),
(89 ,'2016-03-09 14:11:00.000', '2016-03-09 15:00:00.000'),
(101147 ,'2016-03-09 14:52:07.000', '2016-03-09 19:03:44.000'),
(81 ,'2016-03-09 14:54:05.000', '2016-03-09 19:08:47.000'),
(219 ,'2016-03-09 15:31:52.000', '2016-03-09 19:08:48.000'),
(100701 ,'2016-03-09 16:00:18.000', '2016-03-09 19:05:08.000'),
(337 ,'2016-03-09 16:27:44.000', '2016-03-09 19:08:50.000'),
(90 ,'2016-03-09 16:54:34.000', '2016-03-09 17:38:00.000')
SELECT EmployeeId
,SUM(CASE WHEN ISNULL(RegTime, 0)>40 THEN RegTime-40 ELSE 0 END) AS ExtraHour
,SUM(CASE WHEN ISNULL(RegTime, 0)>40 THEN 40 ELSE RegTime END) AS RegTime
FROM(
Select EmployeeId,
DATEPART(dw,LoginTime) AS WeekNumber,
DATEPART(MONTH,LoginTime) AS MonthNumber,
DATEPART(Year,LoginTime) AS YearNumber,
SUM(CONVERT(decimal(18, 2),
DATEDIFF(MINUTE, LoginTime, isnull(LogOutTime,getdate()))/60.00)) AS RegTime
FROM #tempWeekdatbefore WITH(NOLOCK)
WHERE (convert(date, LoginTime) >= convert(date, '3/9/2016')) AND
(convert(date,LogOutTime) <= convert(date, '3/9/2016'))
GROUP BY EmployeeId, DATEPART(dw,LoginTime),
DATEPART(MONTH,LoginTime), DATEPART(Year,LoginTime)) as e
GROUP BY EmployeeId, WeekNumber, MonthNumber, YearNumber
あなたが直面している問題は何ですか? – MusicLovingIndianGirl
は、開始曜日ごとに毎週データをグループ化する問題です。 – Gaurav