2011-08-25 227 views
7

我有一些需要排序的记录,但该字段是varchar。他们使用A-Z的英文字母。 Z后它会从AA,AB,AC,等...例如:如何对字母文本字段进行排序?

CREATE TABLE #foo(x VARCHAR(30)); 

INSERT #foo(x) SELECT 'A' 
UNION SELECT 'AA' 
UNION SELECT 'Z' 
UNION SELECT 'B' 
UNION SELECT 'AB' 
UNION SELECT 'BB'; 

我想在结果的排序是:

A 
B 
Z 
AA 
AB 
BB 

我知道我应该使用一些领域和排序那,但目前我没有这个选择。我正在使用SQL Server,并且前端位于Access 2010中的报告中。

+3

你有问题吗? – Jacob

+2

我添加了表结构和@Rick的所需结果。 –

回答

12

这可能有效。您可以按照将单个字符分组后跟双字符的值的长度进行排序。在这些组内,这些值将按字母顺序排序。

SELECT  Column1 
FROM  dbo.Table1 
ORDER BY LEN(Column1) 
     , Column1 
+3

+1简单 –

+0

虽然不是可靠的。 –

2

这里是你

Select * 
from MyTable 
Order By foo ASC, foo2 ASC, foo3 ASC 

柱ASC使用命令将允许您订购该列的例子字母

5
Declare @SomeStuff table (val varchar(10)); 

Insert @SomeStuff (val) Values ('a'); 
Insert @SomeStuff (val) Values ('b'); 
Insert @SomeStuff (val) Values ('c'); 
Insert @SomeStuff (val) Values ('az'); 
Insert @SomeStuff (val) Values ('ab'); 
Insert @SomeStuff (val) Values ('zz'); 
Insert @SomeStuff (val) Values ('abc1'); 


Select * From @SomeStuff order by LEN(val), val 

使用SQL Server,但应该仍然工作。

结果:

val 
--- 
a 
b 
c 
ab 
az 
zz 
abc1 
6

OK,我有点糊涂了。这听起来像你想要一个时髦的排序顺序。你首先需要单个字母,然后是正常的排序顺序。 (一个完全正常的排序将有A,AA,AB,AC,然后B)

首先,简单的排序上的字母场

select SORTFIELD, OTHER, COLUMNS, IN-TABLE 
from MYTABLE 
order by SORTFIELD 

但是,这不是你想要的。问题是你永远不会告诉我们你想要AAA的位置。它是在AA之后还是在ZZ之后?

AAA ZZ后:

select SORTFIELD, OTHER, COLUMNS, IN-TABLE 
from MYTABLE 
order by LEN(SORTFIELD), SORTFIELD 

AAA AA后(AB)之前

select SORTFIELD, OTHER, COLUMNS, IN-TABLE 
from MYTABLE 
order by case LEN(SORTFIELD) when 1 then 0 else 1 end , SORTFIELD 
相关问题