vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Re: Arbeitszeitberechnung mit SQL Teil 1 
Autor: Drapondur
Datum: 28.05.08 23:56

Hi, also ich hab mal eine Tabelle namens "PalAz" gemacht mit folgenden Werten
PalAzId	ID	KST		Datum	                    Beginn	            	Ende
9	1	2003	2008-05-20 00:00:00.000		1900-01-01 02:15:00		1900-01-01 02:16:00
2	1	2003	2008-05-20 00:00:00.000		1900-01-01 05:15:00		1900-01-01 07:33:00
3	1	2005	2008-05-20 00:00:00.000		1900-01-01 07:33:00		1900-01-01 07:44:00
4	1	2003	2008-05-20 00:00:00.000		1900-01-01 07:44:00		1900-01-01 14:55:00
5	1	2003	2008-05-20 00:00:00.000		1900-01-01 14:55:00		1900-01-01 16:41:00
7	1	2003	2008-05-20 00:00:00.000		1900-01-01 21:00:00		1900-01-01 22:41:00
8	1	2003	2008-05-20 00:00:00.000		1900-01-01 23:00:00		1900-01-01 23:12:00
Spalten:
PalAzId: Der Primärschlüssel der Tabelle, int
ID: Fremdschlüssel (deine Mitarbeiter-ID), int
Datum: Das Datum, datetime
Beginn und Ende: smalldatetime, die immer am 1.1.1900 sind (es werden also nur die Uhrzeiten vom 1.1.1900) genommen.

SQL: (scheinbar setzt das Forum an manchen Stellen Unterstriche rein, wenn Codezeilen zu lang werden.
Ich habe zwar versucht alles so umzubrechen, dass keine Unterstriche mehr da sein sollten, aber ggf. zuerst die Unterstriche aus dem SQL rausschmeissen vor dem Ausführen.)
DECLARE @datum DATETIME 
 
DECLARE @fruehSchichtStart SMALLDATETIME
DECLARE @fruehSchichtEnde SMALLDATETIME
DECLARE @normalZeitEnde SMALLDATETIME
DECLARE @spaetSchichtEnde SMALLDATETIME
 
SET @fruehSchichtStart = '1.1.1900 00:00'
SET @fruehSchichtEnde = '1.1.1900 06:00'
SET @normalZeitEnde = '1.1.1900 22:00'
SET @spaetSchichtEnde = '2.1.1900 00:00'
SET @datum = '20.05.2008'
 
--Frühschicht
SELECT *, 
	Beginn AS RealerBeginn,
	(CASE 
		WHEN ende < @fruehSchichtEnde THEN ende
		ELSE @fruehSchichtEnde
	END) AS RealesEnde,
	DATEDIFF(mi, Beginn,
		(CASE 
			WHEN ende < @fruehSchichtEnde THEN ende
			ELSE @fruehSchichtEnde
		END)
	) AS DauerMinuten, 
	'Frueh' AS Schicht
FROM PalAz 
WHERE Datum=@datum AND Beginn>=@fruehSchichtStart
AND DATEDIFF(mi, Beginn,
		(CASE 
			WHEN ende < @fruehSchichtEnde THEN ende
			ELSE @fruehSchichtEnde
		END)
	)>0
 
UNION
 
--Normalzeit
SELECT *, 
	(CASE 
		WHEN Beginn > @fruehSchichtEnde THEN Beginn
		ELSE @fruehSchichtEnde
	END) AS RealerBeginn,
	(CASE 
		WHEN ende < @normalZeitEnde THEN ende
		ELSE @normalZeitEnde
	END) AS RealesEnde,
	DATEDIFF(
		mi, 
		(CASE 
			WHEN Beginn > @fruehSchichtEnde THEN Beginn
			ELSE @fruehSchichtEnde
		END),
		(CASE 
			WHEN ende < @normalZeitEnde THEN ende
			ELSE @normalZeitEnde
		END)
	) AS DauerMinuten, 
	'Normal' AS Schicht
FROM PalAz 
WHERE Datum=@datum 
AND 
   ((Beginn>=@fruehSchichtEnde AND beginn < @normalZeitEnde) 
     OR (ende > @fruehSchichtEnde ))
AND DATEDIFF(
	mi, 
	(CASE 
		WHEN Beginn > @fruehSchichtEnde THEN Beginn
		ELSE @fruehSchichtEnde
	END),
	(CASE 
		WHEN ende < @normalZeitEnde THEN ende
		ELSE @normalZeitEnde
	END)
)>0
 
UNION
 
--Spätschicht
 
SELECT *, 
	(CASE 
		WHEN Beginn > @normalZeitEnde THEN Beginn
		ELSE @normalZeitEnde
	END) AS RealerBeginn,
	(CASE 
		WHEN ende < @spaetSchichtEnde THEN ende
		ELSE @spaetSchichtEnde
	END) AS RealesEnde,
	DATEDIFF(
		mi, 
		(CASE 
			WHEN Beginn > @normalZeitEnde THEN Beginn
			ELSE @normalZeitEnde
		END),
		(CASE 
			WHEN ende < @spaetSchichtEnde THEN ende
			ELSE @spaetSchichtEnde
		END) 
	) AS DauerMinuten, 
	'Spät' AS Schicht
FROM PalAz 
WHERE Datum=@datum AND (Beginn>=@normalZeitEnde OR Ende>@normalZeitEnde)
--	AND DATEDIFF(
--		mi, 
--		(CASE 
--			WHEN Beginn > @fruehSchichtEnde THEN Beginn
--			ELSE @fruehSchichtEnde
--		END),
--		(CASE 
--			WHEN ende < @normalZeitEnde THEN ende
--			ELSE @normalZeitEnde
--		END)
--	)>0
 
ORDER BY Schicht, RealerBeginn
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Arbeitszeitberechnung mit SQL3.130BernyH28.05.08 10:23
Re: Arbeitszeitberechnung mit SQL Teil 11.505Drapondur28.05.08 23:56
Arbeitszeitberechnung mit SQL Teil 21.313Drapondur28.05.08 23:57
Arbeitszeitberechnung mit SQL Teil 31.347Drapondur28.05.08 23:57
Re: Arbeitszeitberechnung mit SQL Teil 31.196ModeratorDaveS29.05.08 08:32
Re: Arbeitszeitberechnung mit SQL Teil 31.217ModeratorFZelle29.05.08 09:19
Re: Arbeitszeitberechnung mit SQL Teil 31.176BernyH29.05.08 10:14
Re: Arbeitszeitberechnung mit SQL Teil 31.162ModeratorDaveS29.05.08 10:35
Re: Arbeitszeitberechnung mit SQL Teil 31.147BernyH29.05.08 10:11

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel