Oracle sql order by, avec instruction de cas
Je suis confronté à une difficulté dans la compréhension de l'oracle(12c) de sql clause order by avec instruction de cas.
J'ai une table avec les données ci-dessous,
SELECT DEPT_NO, DEPT_NAME FROM SORTNG_LOGIC;
DEPT_NO DEPT_NAME
---------- --------------------
1 FINANCE
2 ACCOUNT
3 HUMAN RESOURCE
4 AUDIT
5 TRAINING
Je suis de l'exécution de la requête sql ci-dessous pour cette table à ajouter commande personnalisée, sur oracle sql developer.
SELECT DEPT_NO, DEPT_NAME FROM SORTNG_LOGIC ORDER BY (
CASE DEPT_NAME
WHEN 'ACCOUNT' THEN '1'
WHEN 'AUDIT' THEN '2'
WHEN 'FINANCE' THEN '3'
ELSE '4' END
)DESC;
Ceci donne le résultat ci-dessous :
DEPT_NO DEPT_NAME
---------- --------------------
3 HUMAN RESOURCE
5 TRAINING
1 FINANCE
4 AUDIT
2 ACCOUNT
Mais je m'y attendais, le résultat devrait être
DEPT_NO DEPT_NAME
---------- --------------------
5 TRAINING
3 HUMAN RESOURCE
1 FINANCE
4 AUDIT
2 ACCOUNT
Que je suis le tri de la dept_name dans l'ordre décroissant, j'ai pensé'Training " doit être au-dessus de 'ressources humaines'.
Où est ma compréhension va mal? Quelqu'un pourrait-il expliquer cela en détail?
comment sur l'utilisation de décoder au lieu de cas avec l'ordre par? ou de porter cette question à sélectionner une partie et en l'utilisant dans la sous-requête pour trier?
Pourquoi pensez-vous que la version? Vous avez 4 - 4 - 3 - 2 - 1. Comment faites-vous la distinction entre le 4 et le 4 ? Vous n'avez pas
Je peux utiliser DEPT_NAME desc, mais je voudrais comprendre l'ordre en cas de déclaration. Merci\
Pourquoi pensez-vous que la version? Vous avez 4 - 4 - 3 - 2 - 1. Comment faites-vous la distinction entre le 4 et le 4 ? Vous n'avez pas
WHEN 'HUMAN RESOURCE' THEN '4' ELSE '5' END
... N'est-ce pas assez pour le ORDER BY DEPT_NAME DESC
dans votre cas?Je peux utiliser DEPT_NAME desc, mais je voudrais comprendre l'ordre en cas de déclaration. Merci\
OriginalL'auteur JohnySam | 2016-01-10
Vous devez vous connecter pour publier un commentaire.
Si vous voulez le nom du département dans l'ordre décroissant, vous devez inclure cette information dans la requête:
Il n'y a aucune raison pour que la valeur de la
CASE
être une chaîne de caractères. La logique vraiment des appels pour un certain nombre. Si vous utilisez une chaîne de caractères, puis des valeurs de plus de 9 ne fonctionne pas comme vous l'espériez.Il y a deux clés pour la
order by
. Ils sont différents. Oracle ne peut pas se confondre.avons-nous vraiment besoin d'avoir deux fois?
LOL. Absolument pas.
OriginalL'auteur Gordon Linoff
Essayez-le avec les décoder fonction se fait de la même chose.
Comme mentionné par @ingénieur, à la fois
HUMAN RESOURCES
, etTRAINING
sont affectés de 4 pour ne pas être triée selon votre souhait, sauf si vous explicitement dire la DB en fournissant de l'case when
ou d'une autre méthode. Dans ce cas, je suppose que c'est le retourHUMAN RESOURCES
d'abord que c'est d'abord entreposé dans la base de données et puis vientTRAINING
.OriginalL'auteur Spidey