Je kunt het beste code-tags om een query zetten.
Zoals onder.
Wat ik niet helemaal begrijp... hoe ziet die ALURENPERDAG tabel eruit.
Wat sla je daar per record op.
Want ik zie een weeknummer en alle uren voor alle dagen.
Is dat dan 1 record per week? (want dan heb je volgens mij geen sum en group by nodig).
Is dat 1 record per dag dan had je natuurlijk geen zodag, madag e.d. nodig.
Ik ben dus een beetje onzeker over de efficiency van je tabel-opbouw.
SQL Code:
SELECT
RELATIE.dossiernum,
ALURENPERDAG.jaar,
ALURENPERDAG.pernr,
ALURENPERDAG.week,
sum(ALURENPERDAG.zodag + ALURENPERDAG.madag + ALURENPERDAG.didag +
ALURENPERDAG.wodag + ALURENPERDAG.dodag + ALURENPERDAG.vrdag + ALURENPERDAG.zadag) AS uren
FROM ALURENPERDAG
INNER JOIN ALUMEDEWERKER ON ALURENPERDAG.mdwnr = ALUMEDEWERKER.mdwnr
AND ALURENPERDAG.jaar = (SELECT Max(ALURENPERDAG.jaar) FROM ALURENPERDAG)
AND ALURENPERDAG.week = (SELECT Max(ALURENPERDAG.week) FROM ALURENPERDAG)
AND ALURENPERDAG.pernr = (SELECT Max(ALURENPERDAG.pernr) FROM ALURENPERDAG)
INNER JOIN RELATIE ON ALUMEDEWERKER.relnr = RELATIE.relnr
GROUP BY
RELATIE.dossiernum,
ALURENPERDAG.jaar,
ALURENPERDAG.pernr,
ALURENPERDAG.week
terwijl ik op zoek ben naar het laatste jaar/periode/week per medewerker.
Ik neem even aan, omdat de tabel alurenPERDAG heet, dat tabel dus 0 uur voor zodag heeft op maandag, dinsdag enzovoort. (In welk geval je je tabel beter anders op had kunnen bouwen)
Is dit dan niet wat je wilt?
SQL Code:
SELECT
RELATIE.dossiernum,
ALURENPERDAG.jaar,
ALURENPERDAG.pernr,
ALURENPERDAG.week,
sum(ALURENPERDAG.zodag + ALURENPERDAG.madag + ALURENPERDAG.didag +
ALURENPERDAG.wodag + ALURENPERDAG.dodag + ALURENPERDAG.vrdag + ALURENPERDAG.zadag) AS uren
FROM ALURENPERDAG
LEFT JOIN ALUMEDEWERKER ON ALURENPERDAG.mdwnr = ALUMEDEWERKER.mdwnr
LEFT JOIN RELATIE ON ALUMEDEWERKER.relnr = RELATIE.relnr
WHERE ALURENPERDAG.jaar = (SELECT Max(ALURENPERDAG.jaar) FROM ALURENPERDAG)
AND ALURENPERDAG.week = (SELECT Max(ALURENPERDAG.week) FROM ALURENPERDAG)
GROUP BY
RELATIE.dossiernum,
ALURENPERDAG.jaar,
ALURENPERDAG.pernr,
ALURENPERDAG.week
Dit zou echter wel alleen voor ALLE werknemers de laatste week geven. Niet de laatste week van die werknemer zelf. Maar dit was in jouw oorspronkelijke query ook zo. Als je dat niet wilt had je in de SELECT Max() ook de controle op werknemer weer op moeten nemen.
Tevens had je een Max(ALURENPERDAG.pernr) opgenomen in je INNER wat natuurlijk resulteert in alleen resultaten voor het hoogste pernr (ook niet wat je wilde).
Bookmarks