Commande personnalisée dans Oracle PL / SQL
J'ai un oracle de la requête et dans laquelle je veux que le résultat soit dans l'ordre personnalisé de premier rang de DIRECTEUR, "DIRECTEUR", "MANAGER", "EMPLOYÉ" qui est le champ GRADE_DESCRIPTON. Je suis l'aide de la requête ci-dessous.
Cependant, je ne suis pas d'obtenir le résultat souhaité
L'ordre du résultat im obtenir est "DIRECTEUR PRINCIPAL','MANAGER', DIRECTEUR, EMPLOYÉ
SELECT DISTINCT GRADE_DESCRIPTION
, HIRING_FORECATS.*
FROM GRADE_MASTER left join HIRING_FORECATS
ON (HIRING_FORECATS.GRADE = GRADE_MASTER.GRADE_DESCRIPTION
and HIRING_FORECATS.LOCATION = 'HO' )
order by decode
(GRADE_MASTER.GRADE_DESCRIPTION, 'SENIOR DIRECTOR', 'DIRECTOR', 'MANAGER', 'EMPLOYEE')
Des Suggestions??
source d'informationauteur Andromeda
Vous devez vous connecter pour publier un commentaire.
Le point sur
decode()
est que pour chaque paire de valeurs, il remplace le deuxième valeur pour la première. Si votre posté requête sortes de premier rang de DIRECTEUR de "comme " DIRECTEUR", "MANAGER" en tant que "SALARIÉ" et tout le monde au hasard après que.Donc ce que vous devez faire est d'assigner un ordre de tri pour chaque valeur. La plus pérenne cela pourrait être d'attribuer une SORT_ORDER colonne à la GRADE_DESCRIPTION table, mais ce n'est pas toujours pratique. Donc, si vous avez seulement un ou deux rapports qui doivent être triés de cette façon (il semble probable), alors vous pouvez simplement continuer avec le hard-codé descriptions:
C'est une bonne idée d'inclure une valeur par défaut, juste au cas où. J'aime aussi laisser de grandes lacunes dans le genre de chiffres, pour le rendre plus facile à fente dans une nouvelle valeur.
Vous devez utiliser SQL CAS au lieu d'un PL/SQL DÉCODER:
Cela permet de garder l'analyseur de commutation entre SQL et PL/SQL modes.
Vous pouvez ajouter une nouvelle colonne à
GRADE_MASTER
pour représenter la commande ou niveaux. Cela vous permettra de modifier la clause order by:Et a l'avantage de n'exiger des modifications à la
GRADE_MASTER
table quand un nouveau grade est introduit.