Ich habe diese Tabelle, die ich verwendet, um Benutzeranmeldung Logout Details zu speichern. Ich möchte Daten mit Start Wochentag abfragen, und Daten wöchentlich abholen, zB wenn ich vom 1. März 2016 bis 28. März 2016 abfrage und mein Starttag der Woche ist Mittwoch, dann brauche ich alle Mitarbeiterdaten wöchentlich März 2 bis 8 März 9 bis 15 März 16 bis 22 für jeden Mitarbeiter. Wenn jemand in dieser Woche mehr als 40 Stunden arbeitet, muss ich auch eine zusätzliche Stunde berechnen.Sql erhalten Mitarbeiter Arbeitsstunde wöchentlich zum Anfang Wochentag (z. B. Starttag der Woche, Montag, Dienstag, etc.)
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
Was ist das Problem, vor dem Sie stehen? – MusicLovingIndianGirl
Problem mit dem Gruppieren von Daten wöchentlich zum Anfangstag der Woche. – Gaurav