按字符串的长度排序,然后按pl sql中的单字母desc排序

时间:2014-09-03 11:20:23

标签: sql plsql

我有一套单字母和双字母需要订购。

Data : 
A
B
D
E
F
G
AL
BL
DL

Output :
AL
BL
DL
E
F
G
A
B
D

我可以通过查询

获得以下结果
SELECT column_name
        FROM table_name
   ORDER BY LENGTH(column_name) desc, column_name asc;

AL
BL
DL
A
B
D
E
F
G

但是如何在E F G之后放置A B D

任何帮助都会得到满足......

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是根据字符串中的第一个字符使用有关最大长度的其他信息。因此,'A'的值为2,'G'的值为1:

SELECT column_name
FROM (select t.*,
             max(length(column_name)) over (partition by substr(column_name, 1, 1)) as fclen
      from table_name t
     ) t
ORDER BY LENGTH(column_name) desc,
         (case when fclen = 1 then 1 else 0 end) desc,
         column_name asc;