Mijn uren worden niet fatsoenlijk berekend. Ik krijg 40+ uren per dag en soms ook negatieve uren. Iemand enig idee?
Code:
SELECT *
FROM [select z.*, format(cstr(int(y.workedhours/1)), "00") + ':' + format(cstr(cdbl(y.workedhours - int(y.workedhours/1))*60), "00") as workedhours
from (SELECT tblWerknemers.WerknemersID, tblWerknemers.WerknemersVoornaam, tblWerknemers.WerknemersAchternaam, tblWerkuren.WerkurenID, tblWerkuren.WerkurenDatum, tblWerkuren.WerkurenStart, tblWerkuren.WerkurenEinde, format(cstr(int((DateDiff("n", min(werkurenstart),max(werkureneinde))/60)/1)), "00") + ':' + format(cstr(cdbl((DateDiff("n", min(werkurenstart),max(werkureneinde))/60) - int((DateDiff("n", min(werkurenstart),max(werkureneinde))/60)/1))*60), "00") AS Gewerkt, tblWerkuren.WerkurenOpmerking
FROM tblWerknemers INNER JOIN tblWerkuren ON tblWerknemers.WerknemersID = tblWerkuren.WerknemersID
GROUP BY tblWerknemers.WerknemersID, tblWerknemers.WerknemersVoornaam, tblWerknemers.WerknemersAchternaam, tblWerkuren.WerkurenID, tblWerkuren.WerkurenDatum, tblWerkuren.WerkurenStart, tblWerkuren.WerkurenEinde, tblWerkuren.WerkurenOpmerking) as z,
(select az.werkurendatum, sum(az.workedhours) as workedhours from
(SELECT werkurendatum, nz((totalhours - sum(gaps)), totalhours) AS workedhours
FROM [SELECT p2.werkurendatum as datum, datediff("n", MAX(P1.WerkurenEinde), P2.WerkurenStart)/60 as gaps, p2.werknemersid as werknemersid
FROM tblWerkuren AS P1
INNER JOIN
tblWerkuren AS P2
ON P1.WerkurenStart < P2.WerkurenStart and p1.werkurendatum = p2.werkurendatum and p1.werknemersid = p2.werknemersid
GROUP BY P2.WerkurenStart, p2.werkurendatum, p2.werknemersid
HAVING MAX(P1.WerkurenEinde) < P2.WerkurenStart]. AS a RIGHT JOIN [SELECT c.WerknemersID, c.WerkurenDatum,(DateDiff("n", min(c.werkurenstart),max(c.werkureneinde))/60) AS totalhours
FROM tblWerkuren AS c
group by c.werkurendatum, c.werknemersid]. AS d ON (a.datum + a.werknemersid) = (d.werkurendatum + d.werknemersid)
GROUP BY datum, werkurendatum, totalhours) as az
group by az.werkurendatum) as y
where (z.werkurendatum = y.werkurendatum)]. AS other, [select format(cstr(int(sum(az.workedhours)/1)), "00") + ':' + format(cstr(cdbl(sum(az.workedhours) - int(sum(az.workedhours)/1))*60), "00") as total from
(SELECT werkurendatum, nz((totalhours - sum(gaps)), totalhours) AS workedhours
FROM [SELECT p2.werkurendatum as datum, datediff("n", MAX(P1.WerkurenEinde), P2.WerkurenStart)/60 as gaps, p2.werknemersid as werknemersid
FROM tblWerkuren AS P1
INNER JOIN
tblWerkuren AS P2
ON P1.WerkurenStart < P2.WerkurenStart and p1.werkurendatum = p2.werkurendatum and p1.werknemersid = p2.werknemersid
GROUP BY P2.WerkurenStart, p2.werkurendatum, p2.werknemersid
HAVING MAX(P1.WerkurenEinde) < P2.WerkurenStart]. AS a RIGHT JOIN [SELECT c.WerknemersID, c.WerkurenDatum,(DateDiff("n", min(c.werkurenstart),max(c.werkureneinde))/60) AS totalhours
FROM tblWerkuren AS c
group by c.werkurendatum, c.werknemersid]. AS d ON (a.datum + a.werknemersid) = (d.werkurendatum + d.werknemersid)
GROUP BY datum, werkurendatum, totalhours) as az]. AS total
WHERE 1=1;
Laatst bewerkt: