Ik ben op zoek naar een mogelijkheid om het volgende resultaat te krijgen.


Ik heb een lijst 'dienst' waar alle diensten in staan vermeld. Als voorbeeld staat hierin:

ID - Naam - Datum - Dienst - Roepnummer

1 - Maarten - 5/9/2018 - Avond - Balie

2 - Maarten - 7/9/2018 - Ochtend - Balie

3 - Maarten - 8/9/2018 - Ochtend - Balie​

4 - Maarten - 9/9/2018 - Avond - Lab

5 - Jan - 9/9/2018 - Avond - Lab

6 - Piet - 8/9/2018 - Avond - Balie



Nu wil ik een overzicht krijgen met iedereen die in dienst is op 9/9/2018 in de avonddienst met daarachter hoevaak die persoon Balie heeft gedaan (van alle items). Dus:

Op 9/9/2018 in de avonddienst zijn de volgende personen:

Maarten - Balie (3x)

Jan - Balie (0x)
Ik zou dan een sub-query joinen waarin de telling wordt gedaan:


select dienst.naam, 
       dienst.roepnummer, 
       concat("Balie (", coalesce(aantal.diensten, 0), "x)") as aantal 
from   dienst
left join (select naam, count(roepnummer) as diensten from dienst where roepnummer = 'Balie' group by naam) as aantal on dienst.naam = aantal.naam
where dienst.datum = '2018-9-9';


https://www.db-fiddle.com/f/mV3BitNLFnMUQ1EVaPAFtU/0

Ik hoop dat je de datums niet letterlijk als "5/9/2018" hebt opgeslagen, dit maakt ze namelijk nogal ongeschikt om goed mee te kunnen rekenen.

On topic: kan dit niet simpelweg met een COUNT en een GROUP BY?
EDIT: ah, ook de mensen die geen dienst hadden op die post, dan moet je iets met een LEFT JOIN idd.

Uhm, die informatie die je wilt hebben:
- wie er op 9/9/2018 een avonddienst heeft gedraaid (en niet noodzakelijkerwijs balie)
- en wie er wel eens achter de balie heeft gestaan (op een willekeurige datum)
...
Wat hebben die twee verder met elkaar te maken? Dit lijkt mij compleet ongecorelleerd?
Logisch gezien zouden dit dan dus eigenlijk ook twee (aparte) queries moeten zijn lijkt mij.

Anyhow, als je dit dan toch zou willen combineren wordt het zoiets. De crux hierbij is dat je de conditie m.b.t. het roepnummer in de JOIN-conditie zelf zet.
SELECT a.Naam, COUNT(b.ID) AS aantal
FROM tabel a
LEFT JOIN tabel b ON (b.Naam = a.Naam AND b.Roepnummer = 'Balie')
WHERE a.Dienst = 'Avond'
AND a.Datum = '9/9/2018'
GROUP BY a.Naam

Reageren