Ik ben een applicatie aan het maken voor een soort uitzendbureau. Nu loop ik vast op een SQL-query (voor SQL Server) voor het volgende:
Het is de bedoeling dat op een pagina waar de gegevens van 1 klant staan, een overzicht wordt weergeven van alle personeelsleden (uitzendkrachten) die ooit zijn ingezet voor de betreffende klant.
Ik maak gebruik van onderstaande tabellen en kolommen voor deze pagina
<Personeel>
personeel_id, (PK)
achternaam,
voornaam
<Klanten>
klant_id, (PK)
naam
<Opdrachten>
opdracht_id, (PK)
klant_id, (FK klanten)
personeel_id, (FK personeel)
opdracht
startdatum
einddatum
De weergave op het scherm van elk personeelslid + opdracht is als volgt:
voornaam,achternaam,opdracht,startdatum,einddatum
Een simpele query die alle personeelsleden laat zien die ooit hebben voor de klant hebben gewerkt, lukt wel:
SELECT
o.*,
p.voornaam,
p.achternaam
FROM
opdrachten o,
personeel p
WHERE
o.klant_id = $klant_id
AND p.personeel_id = o.personeel_id
ORDER BY
p.voornaam,
p.achternaam,
o.einddatum
Het kan echter voorkomen dat een personeelslid meerdere keren bij deze klant heeft gewerkt aan een andere opdracht. In dat geval moet alleen de laatste opdracht (via de einddatum) weergeven worden.
De SQL-query moet ook nog eens gesorteerd kunnen worden op de vijf kolommen;
[voornaam][achternaam][opdracht][startdatum][einddatum]
Ik krijg dit niet gedaan met een GROUP BY of DISTINCT.
Kunnen jullie mij s.v.p. helpen?
Het is de bedoeling dat op een pagina waar de gegevens van 1 klant staan, een overzicht wordt weergeven van alle personeelsleden (uitzendkrachten) die ooit zijn ingezet voor de betreffende klant.
Ik maak gebruik van onderstaande tabellen en kolommen voor deze pagina
<Personeel>
personeel_id, (PK)
achternaam,
voornaam
<Klanten>
klant_id, (PK)
naam
<Opdrachten>
opdracht_id, (PK)
klant_id, (FK klanten)
personeel_id, (FK personeel)
opdracht
startdatum
einddatum
De weergave op het scherm van elk personeelslid + opdracht is als volgt:
voornaam,achternaam,opdracht,startdatum,einddatum
Een simpele query die alle personeelsleden laat zien die ooit hebben voor de klant hebben gewerkt, lukt wel:
SELECT
o.*,
p.voornaam,
p.achternaam
FROM
opdrachten o,
personeel p
WHERE
o.klant_id = $klant_id
AND p.personeel_id = o.personeel_id
ORDER BY
p.voornaam,
p.achternaam,
o.einddatum
Het kan echter voorkomen dat een personeelslid meerdere keren bij deze klant heeft gewerkt aan een andere opdracht. In dat geval moet alleen de laatste opdracht (via de einddatum) weergeven worden.
De SQL-query moet ook nog eens gesorteerd kunnen worden op de vijf kolommen;
[voornaam][achternaam][opdracht][startdatum][einddatum]
Ik krijg dit niet gedaan met een GROUP BY of DISTINCT.
Kunnen jullie mij s.v.p. helpen?