Hallo wieder SQL Server 2008-Gurus.SQL Server 2008 CASE-Logik in SELECT-Anweisung
Ich muss die folgenden Regeln für die Einstellung der Anfangs- und Endzeiten eines Mitarbeiters für seinen Arbeitstag (stündliche Mitarbeiter) in einer SELECT
-Anweisung anwenden. Ich entschuldige mich im Voraus für meine SQL-Ignoranz.
Die Regel ist ihre Startzeit auf einen Wert in einem Tabellenfeld für die Arbeiter gespeichert setzen, wenn sie am oder vor ihrer Startzeit anmelden (eine in den Arbeitern
starttime
Spalte gespeichert Zeit) und damit Kredit für den Start zu ihrer Startzeit.Wenn sie sich innerhalb von 10 Minuten vor oder nach ihrer Endzeit in einer Spalte für den Arbeiter abmelden, erhalten sie den vollen Tag, ein anderer Wert wird in einer Spalte der Arbeitertabelle gespeichert, ansonsten sind sie bestraft einige Prozent einer Stunde, dh ihre Abmeldung Zeit gerundet auf .25 einer Stunde weniger am nächsten zu der Zeit, die sie ausgeloggt. d.h. wenn sie sich um 4:30 abmeldet und sie sich um 4:18 abmeldet, ist ihre Abmeldezeit 4:15. Wenn sie sich um 4:20 abmelden und um 4:30 abmelden, ist ihre Abmeldezeit 4:30.
Die erste Regel gilt für alle Stundenarbeiter, deren Arbeitsstunden weniger oder gleich ihrem erwarteten Arbeitstag sind. Der Vorbehalt gilt für diejenigen, bei denen Überstunden in Ordnung sind (ein Bitwert ist auf 1 gesetzt). Wenn Überstunden erlaubt sind, kann die Anzahl der abzurechnenden Stunden den für sie gespeicherten Wert für den ganzen Tag übersteigen, und daher kann der Wert ihrer Abmeldezeit den Gesamtwert überschreiten.
Die Frage ist, können diese Regeln in der SELECT-Anweisung berechnet werden, und wenn ja, kann ich Hilfe mit dem Code bekommen?
Die Spalten, die Informationen enthalten, sind:
worker.startime (TIME)
worker.endtime (TIME)
worker.overtimeallowed (BIT)
worker.workdayhours (decimal (12,2))
worker.penaltyvalue (decimal (12,2))
Wenn es eine UDF oder gespeicherte Prozedur erfordert (da ich die Telerik Report bin mit) Ich bin nicht sicher, würde es unterstützt werden, aber Das ist wahrscheinlich eine andere Frage.
Bisher habe ich Hilfe bei der Anwendung einiger CASE-Logik bekommen - Berechnung, ob ein Arbeiter für sein 1/2 Mittagessen Kredit bekommt. Der Code, der geliefert wurde, funktioniert wie versprochen. Dies, glaube ich, kann eine Verlängerung dieser Logik sein - so werde ich den Code zur Verfügung stellen Ich habe hier:
-- for testing purposes only.
DECLARE @StartDate AS DateTime
SET @StartDate = CAST('03/25/2012' AS DATE)
DECLARE @EndDate AS DateTime
SET @EndDate = CAST('04/10/2012' AS DATE)
SELECT
w.Firstname
,w.Lastname
,wf.Login
,wf.logout
,ROUND(CAST(DATEDIFF(MI, wf.Login, wf.Logout) AS DECIMAL)/60,2)
- CASE
WHEN DATEDIFF(hour, wf.Login, wf.Logout) < w.MinimumHours THEN
w.LunchDeduction
ELSE
0
END AS [Hours Credited]
FROM Workers AS w
JOIN Workflow AS wf
ON wf.LoggedInWorkerid = w.ID
JOIN Roles AS r
ON w.RoleID = r.RoleID
WHERE (r.Descript = 'Hourly')
AND wf.Login >= @StartDate AND wf.Logout <= @EndDate
ORDER BY w.Lastname, w.Firstname
Ja, es klingt wie alles in einer Abfrage getan werden kann. Wie die meisten Probleme, versuche es zu brechen.Cut'n'paste dein vorhandenes 'CASE' und modifiziere es, um die" 10 Minuten "Regel zu überprüfen und ein Flag auszugeben. Fügen Sie dann jeweils eine Ebene hinzu. Du wirst es bald genug haben. – HABO
In den meisten Jurisdiktionen, wenn ein Mitarbeiter früh eincheckt, müssen Sie diese für die Zeit bezahlen, auch wenn Überstunden nicht genehmigt werden. Sie haben gearbeitet, sie werden bezahlt. Zeitraum. Ja, es ist ein Problem, aber niemand, mit dem Sie umgehen, indem Sie das Gehalt zurückhalten. HR hat ein Gespräch mit dem Manager über die Festlegung von Erwartungen, und der Manager hat mit dem Angestellten ein Gespräch darüber, wann sie auftauchen und einchecken; Wenn die Erwartungen immer noch nicht erfüllt sind, beginnt das Management mit dem Disziplinarverfahren, um die Einhaltung durchzusetzen. Aber wenn sie einsteigen und arbeiten, werden sie bezahlt. –