3

我似乎找不到这个问题的答案:

假设我有一张这样的桌子:

ID   Name
------------------------
1    AAAAAAAAA
2    ABAAAAAAA
3    BBAAAAAAA
4    CDAAAAAAA
5    BBAAAAAAA

有没有办法我可以订购name- 但是 - 从 say 开始订购BB并让它循环回来(而不是从 AZ 开始,从BBto BA

最终结果将是:

3    BBAAAAAAA
5    BBAAAAAAA
4    CDAAAAAAA
1    AAAAAAAAA
2    ABAAAAAAA

那有意义吗?

4

2 回答 2

3

如果您希望BB出现在开头,您可以使用:

select *
from yourtable
order by case when substring(name, 1, 2) = 'BB' then 0 else 1 end

请参阅带有演示的 SQL Fiddle

如果你想CD出现第二个,然后使用:

select *
from yourtable
order by 
  case 
    when substring(name, 1, 2) = 'BB' then 0 
    when substring(name, 1, 2) = 'CD' then 1 
    else 2 end, name

请参阅带有演示的 SQL Fiddle

第二次查询的结果:

| ID |      NAME |
------------------
|  3 | BBAAAAAAA |
|  5 | BBAAAAAAA |
|  4 | CDAAAAAAA |
|  1 | AAAAAAAAA |
|  2 | ABAAAAAAA |
于 2012-12-21T11:38:52.143 回答
0

这将按名称对所有行进行排序。它将首先>= 'BB'按名称排序行,然后< 'BB'按名称排序行,使其按您想要的方式循环:

select *
from your_table
order by name<'BB', name
于 2012-12-21T11:40:27.827 回答