ORDER BY 使用文本列的自定义优先级

Seb*_*oth 12 oracle

这是一个示例表:

name | cat
----------
hugo | sal
bob  | mgr
mike | dev
jeff | mgr
john | dev
Run Code Online (Sandbox Code Playgroud)

这两个namecat是VARCHAR。

cat 反映了这些名称的类别,但我喜欢为它们分配优先级,然后通过查询将它们全部列出,按此优先级排序。

有哪些可能的方法?我可以提取cat到第二个表中,构建一个外键等。但鉴于我的应用程序非常简单并且结构可能是不可更改的:我必须先列出mgr名称,然后是dev名称,然后是sal名称?

小智 20

假设你不能改变你的结构,你可以在你的 ORDER BY 中使用 CASE 语句:

ORDER BY case cat when 'mgr' then 1 when 'dev' then 2 else 3
Run Code Online (Sandbox Code Playgroud)

但是,如果您可以更改结构,则可以创建一个Category包含类别代码和排名的表格,将您的示例表格加入该Category表格并按此排名排序。