我有几条需要排序的记录,但字段是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中的报告。
答案 0 :(得分:13)
这可能有用。您可以按值的长度进行排序,该值将对单个字符进行分组,后跟双字符。在这些组中,值将按字母顺序排序。
SELECT Column1
FROM dbo.Table1
ORDER BY LEN(Column1)
, Column1
答案 1 :(得分:6)
首先,对字母字段进行简单排序
select SORTFIELD, OTHER, COLUMNS, IN-TABLE
from MYTABLE
order by SORTFIELD
但那不是你想要的。问题是你永远不会告诉我们你想要AAA的地方。它是在AA之后还是在ZZ之后?
ZZ后的AAA:
select SORTFIELD, OTHER, COLUMNS, IN-TABLE
from MYTABLE
order by LEN(SORTFIELD), SORTFIELD
AA之后的AAA(AB之前)
select SORTFIELD, OTHER, COLUMNS, IN-TABLE
from MYTABLE
order by case LEN(SORTFIELD) when 1 then 0 else 1 end , SORTFIELD
答案 2 :(得分: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
答案 3 :(得分:2)
以下是您的示例
Select *
from MyTable
Order By foo ASC, foo2 ASC, foo3 ASC
使用按行排序ASC将允许您按字母顺序排序该列