Tyvärr är det du försöker göra inte möjligt, åtminstone inte i "rak" SQL - du skulle behöva dynamisk SQL, eller en tvåstegsprocess (i det första steget generera en sträng som är en ny SQL-sats). Komplicerat.
Problemet är att du inte inkluderar en fast lista över stadsnamn (som bokstavliga strängar). Du försöker skapa kolumner baserat på vad du än får från (välj stad bland anställda). Antalet kolumner och namnet på kolumnerna är alltså inte känt förrän Oracle-motorn läser data från tabellen, men innan motorn startar måste den redan veta vad alla kolumner kommer att vara. Motsägelse.
Observera också att om detta var möjligt, skulle du nästan säkert vilja (välj distinkt stad från anställda).
TILLAGT:OP ställer en följdfråga i en kommentar (se nedan).
Det idealiska arrangemanget är att städerna ligger i sin egen, mindre tabell, och "staden" i personaltabellen har en främmande nyckelbegränsning så att "stad"-grejen är hanterbar. Du vill inte att en HR-tjänsteman ska komma in i New York, en annan ska komma in i New York City och en tredje ska komma in i NYC för samma stad. På ett eller annat sätt, prova först din kod genom att ersätta underfrågan som följer operatorn IN i pivotsatsen med helt enkelt den kommaseparerade listan med strängliteraler för städerna:... IN ('DFW', 'CH', 'NY'). Observera att ordningen som du lägger dem i den här listan kommer att vara ordningen på kolumnerna i utdata. Jag kollade inte hela frågan för att se om det finns några andra problem; prova detta och låt oss veta vad som händer.
Lycka till!