Как отсортировать текстовое поле по алфавиту?


У меня есть пара записей, которые нужно отсортировать, но поле 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.
4 7

4 ответа:

Это может сработать. Вы можете сортировать по длине значения, которое сгруппирует одиночные символы, за которыми следуют двойные символы. Внутри этих групп значения будут отсортированы в алфавитном порядке.

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

Ладно, я немного запутался. Это звучит так, как будто вы хотите фанки порядка сортировки. Вы хотите сначала отдельные буквы, а затем нормальный порядок сортировки. (Полностью нормальный вид будет иметь A, AA, AB, AC, затем B)

Во-первых, простая сортировка по алфавитному полю

 select SORTFIELD, OTHER, COLUMNS, IN-TABLE
 from  MYTABLE
 order by SORTFIELD
Но это не то, чего ты хочешь. Проблема в том, что вы никогда не говорите нам, где вы хотите ААА. Идет ли он после АА или после 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
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

Вот вам пример

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

Использование Order by column ASC позволит вам упорядочить этот столбец в алфавитном порядке