Ric*_*ick 7 sql-server ms-access
我有几个需要排序的记录,但字段是varchar.他们使用AZ的英文字母.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';
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
A
B
Z
AA
AB
BB
Run Code Online (Sandbox Code Playgroud)
我知道我应该使用数字字段并按此排序,但目前我没有这个选项.我正在使用SQL Server,而前端是在Access 2010中的报表上.
小智 13
这可能会奏效.您可以按值的长度进行排序,该值将对单个字符进行分组,后跟双字符.在这些组中,值将按字母顺序排序.
SELECT Column1
FROM dbo.Table1
ORDER BY LEN(Column1)
, Column1
Run Code Online (Sandbox Code Playgroud)
好的,我有点困惑.听起来你想要一个时髦的排序顺序.你首先需要单个字母,然后是正常的排序顺序.(完全正常的排序会有A,AA,AB,AC,然后B)
首先,在字母字段上进行简单排序
select SORTFIELD, OTHER, COLUMNS, IN-TABLE
from MYTABLE
order by SORTFIELD
Run Code Online (Sandbox Code Playgroud)
但那不是你想要的.问题是你永远不会告诉我们你想要AAA的地方.它是在AA之后还是在ZZ之后?
ZZ之后的AAA:
select SORTFIELD, OTHER, COLUMNS, IN-TABLE
from MYTABLE
order by LEN(SORTFIELD), SORTFIELD
Run Code Online (Sandbox Code Playgroud)
AA之后的AAA(AB之前)
select SORTFIELD, OTHER, COLUMNS, IN-TABLE
from MYTABLE
order by case LEN(SORTFIELD) when 1 then 0 else 1 end , SORTFIELD
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
使用SQL Server但仍应该工作.
结果:
val
---
a
b
c
ab
az
zz
abc1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14878 次 |
| 最近记录: |