Desafortunadamente, lo que está tratando de hacer no es posible, al menos no en SQL "directo":necesitaría SQL dinámico o un proceso de dos pasos (en el primer paso generar una cadena que es una nueva instrucción SQL). Complicado.
El problema es que no está incluyendo una lista fija de nombres de ciudades (como cadenas literales). Está intentando crear columnas basadas en lo que obtenga (seleccione la ciudad de los empleados). Por lo tanto, el número de columnas y el nombre de las columnas no se conocen hasta que el motor de Oracle lee los datos de la tabla, pero antes de que el motor arranque, ya debe saber cuáles serán todas las columnas. Contradicción.
Tenga en cuenta también que si esto fuera posible, seguramente desearía (seleccione distinto ciudad de los empleados).
AGREGADO:El OP hace una pregunta de seguimiento en un comentario (ver más abajo).
El arreglo ideal es que las ciudades estén en su propia tabla más pequeña, y que la "ciudad" en la tabla de empleados tenga una restricción de clave externa para que la "ciudad" sea manejable. No desea que un empleado de recursos humanos ingrese a Nueva York, otro ingrese a la ciudad de Nueva York y un tercero ingrese a la ciudad de Nueva York para la misma ciudad. De una forma u otra, primero pruebe su código reemplazando la subconsulta que sigue al operador IN en la cláusula pivote simplemente con la lista separada por comas de cadenas literales para las ciudades:... IN ('DFW', 'CH', 'NUEVA YORK'). Tenga en cuenta que el orden en que los coloque en esta lista será el orden de las columnas en la salida. No revisé toda la consulta para ver si hay otros problemas; prueba esto y cuéntanos qué sucede.
¡Buena suerte!