sql >> Database >  >> RDS >> Oracle

Moet de namen van werknemers ordenen volgens de kolom van hun stad

Helaas is wat u probeert te doen niet mogelijk, althans niet in "straight" SQL - u zou dynamische SQL nodig hebben, of een proces in twee stappen (in de eerste stap genereert u een string die een nieuwe SQL-instructie is). Ingewikkeld.

Het probleem is dat u geen vaste lijst met plaatsnamen opneemt (als letterlijke tekenreeksen). U probeert kolommen te maken op basis van wat u ook krijgt (selecteer stad uit werknemers). Het aantal kolommen en de naam van de kolommen is dus niet bekend totdat de Oracle-engine de gegevens uit de tabel leest, maar voordat de engine start, moet deze al weten wat alle kolommen zullen zijn. Tegenspraak.

Merk ook op dat als dit mogelijk was, je bijna zeker zou willen (selecteer onderscheiden stad van medewerkers).

TOEGEVOEGD:De OP stelt een vervolgvraag in een opmerking (zie hieronder).

De ideale opstelling is dat de steden in hun eigen, kleinere tabel staan ​​en dat de 'stad' in de tabel met werknemers een externe sleutelbeperking heeft, zodat het 'stad'-ding beheersbaar is. U wilt niet dat één HR-medewerker New York binnenkomt, een andere New York City en een derde NYC voor dezelfde stad. Probeer op de een of andere manier eerst uw code door de subquery die volgt op de operator IN in de spilclausule te vervangen door gewoon de door komma's gescheiden lijst met letterlijke tekenreeksen voor de steden:... IN ('DFW', 'CH', 'NY'). Merk op dat de volgorde waarin u ze in deze lijst plaatst, de volgorde is van de kolommen in de uitvoer. Ik heb niet de hele query gecontroleerd om te zien of er nog andere problemen zijn; probeer dit en laat ons weten wat er gebeurt.

Veel succes!



  1. Postgres gegevenstype cast

  2. Oracle PLSQL-blokstructuur en -typen

  3. 5 manieren om het aantal door de gebruiker gedefinieerde tabellen in een SQL Server-database te tellen

  4. Hoe een RDS Postgres-database pg_dumpen?