Niestety to, co próbujesz zrobić, nie jest możliwe, przynajmniej nie w "prostym" SQL - potrzebny byłby dynamiczny SQL lub dwuetapowy proces (w pierwszym kroku generujący łańcuch, który jest nową instrukcją SQL). Skomplikowane.
Problem polega na tym, że nie zawierasz stałej listy nazw miast (jako literałów łańcuchowych). Próbujesz utworzyć kolumny na podstawie tego, z czego otrzymujesz (wybierz miasto spośród pracowników). Tak więc liczba kolumn i ich nazwy nie są znane, dopóki silnik Oracle nie odczyta danych z tabeli, ale przed uruchomieniem silnika musi już wiedzieć, jakie będą wszystkie kolumny. Sprzeczność.
Zwróć też uwagę, że gdyby to było możliwe, prawie na pewno chciałbyś (wybierz różne miasto od pracowników).
DODANO:OP zadaje dodatkowe pytanie w komentarzu (patrz poniżej).
Idealnym rozwiązaniem jest, aby miasta znajdowały się we własnej, mniejszej tabeli, a „miasto” w tabeli pracowników miało ograniczenie klucza obcego, aby można było zarządzać „miastem”. Nie chcesz, aby jeden pracownik działu HR wjechał do Nowego Jorku, inny do Nowego Jorku, a trzeci do Nowego Jorku dla tego samego miasta. Tak czy inaczej, najpierw wypróbuj swój kod, zastępując podzapytanie następujące po operatorze IN w klauzuli przestawnej po prostu listą oddzielonych przecinkami literałów dla miast:... IN ('DFW', 'CH', „NY”). Zauważ, że kolejność, w jakiej umieścisz je na tej liście, będzie kolejnością kolumn w danych wyjściowych. Nie sprawdziłem całego zapytania, aby zobaczyć, czy są jakieś inne problemy; spróbuj tego i daj nam znać, co się stanie.
Powodzenia!