Oracle
 sql >> Base de données >  >> RDS >> Oracle

Besoin d'organiser les noms des employés en fonction de leur colonne de ville

Malheureusement, ce que vous essayez de faire n'est pas possible, du moins pas en SQL "simple" - vous auriez besoin de SQL dynamique ou d'un processus en deux étapes (dans la première étape, générer une chaîne qui est une nouvelle instruction SQL). Compliqué.

Le problème est que vous n'incluez pas une liste fixe de noms de villes (sous forme de littéraux de chaîne). Vous essayez de créer des colonnes basées sur tout ce que vous obtenez (sélectionnez la ville parmi les employés). Ainsi, le nombre de colonnes et le nom des colonnes ne sont pas connus tant que le moteur Oracle n'a pas lu les données de la table, mais avant que le moteur ne démarre, il doit déjà savoir ce que seront toutes les colonnes. Contradiction.

Notez également que si cela était possible, vous voudriez presque sûrement (sélectionnez distinct ville des employés).

AJOUT :L'OP pose une question de suivi dans un commentaire (voir ci-dessous).

L'arrangement idéal est que les villes soient dans leur propre table plus petite et que la "ville" dans la table des employés ait une contrainte de clé étrangère afin que la chose "ville" soit gérable. Vous ne voulez pas qu'un employé des RH entre à New York, qu'un autre entre à New York et qu'un troisième entre à NYC pour la même ville. D'une manière ou d'une autre, essayez d'abord votre code en remplaçant la sous-requête qui suit l'opérateur IN dans la clause pivot par simplement la liste séparée par des virgules des littéraux de chaîne pour les villes :... IN ('DFW', 'CH', 'NEW YORK'). Notez que l'ordre dans lequel vous les placez dans cette liste sera l'ordre des colonnes dans la sortie. Je n'ai pas vérifié l'intégralité de la requête pour voir s'il y a d'autres problèmes ; essayez ceci et faites-nous savoir ce qui se passe.

Bonne chance !