Oracle
 sql >> Database >  >> RDS >> Oracle

È necessario organizzare i nomi dei dipendenti secondo la colonna della loro città

Sfortunatamente ciò che stai cercando di fare non è possibile, almeno non in SQL "diretto":avresti bisogno di un SQL dinamico o di un processo in due fasi (nel primo passaggio generando una stringa che è una nuova istruzione SQL). Complicato.

Il problema è che non stai includendo un elenco fisso di nomi di città (come stringhe letterali). Stai cercando di creare colonne in base a ciò da cui ottieni (seleziona la città dai dipendenti). Pertanto il numero di colonne e il nome delle colonne non è noto fino a quando il motore Oracle non legge i dati dalla tabella, ma prima che il motore si avvii deve già sapere quali saranno tutte le colonne. Contraddizione.

Nota anche che se ciò fosse possibile, quasi sicuramente vorresti (selezionare distinto città dai dipendenti).

AGGIUNTO:L'OP pone una domanda di follow-up in un commento (vedi sotto).

La disposizione ideale è che le città siano nella loro tabella più piccola e la "città" nella tabella dei dipendenti abbia un vincolo di chiave esterna in modo che la cosa "città" sia gestibile. Non vuoi che un impiegato delle risorse umane entri a New York, un altro che entri a New York City e un terzo che entri a New York per la stessa città. In un modo o nell'altro, prova prima il tuo codice sostituendo la sottoquery che segue l'operatore IN nella clausola pivot con semplicemente l'elenco separato da virgole di stringhe letterali per le città:... IN ('DFW', 'CH', 'NY'). Nota che l'ordine in cui li metti in questo elenco sarà l'ordine delle colonne nell'output. Non ho controllato l'intera query per vedere se ci sono altri problemi; prova questo e facci sapere cosa succede.

Buona fortuna!