2014-09-03 69 views
0

我有一组需要排序的单字母和双字母。按字符串的长度排序,然后按PL中的单字母desc排序

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 

但如何实现以下放置ABD EFG后,要做到这一点

任何帮助将appriciated ...

+0

你想那些特殊的信件后怎么办? – 2014-09-03 11:21:29

+0

预期的O/P在问题中。 @GordonLinoff – 2014-09-03 11:24:11

+0

是的,我想在最后2个字母的A B D应该先出现,然后是A B D,然后是A B D。 – 2014-09-03 11:25:43

回答

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; 
+0

谢谢,问题解决了... – 2014-09-03 12:03:02

相关问题