SQL按顺序排序

问题描述 投票:0回答:4

我有一张桌子,我正在尝试排序并遇到一些困难。它是一个序列列,用于表示分层数据,自动排序如下所示:

SEQUENCE 
1
1.1
1.10
1.2
1.3    
...
2
2.1

相反,我需要排序:

SEQUENCE 
1
1.1
1.2
...
1.10
2
2.1

它位于MS Access中,它是一个本地(临时)表,因此我无法访问hierarchyID或任何其他很酷的MS-SQL工具。此外,序列没有固定的级别,所以我不能轻易地将它们分成列。有任何想法吗?

澄清:序列没有固定的级别,并不局限于两个部分。它通常是5+(例如1.1.1.1.1)。

sql ms-access
4个回答
0
投票

您可以在主版本和次版本之间拆分值,将它们转换为数字,然后按两者排序。

但是,在Access SQL中拆分很难。如果您要使用3部分或更多部分版本号,我建议您使用VBA。

SELECT Sequence
FROM MyTable
ORDER BY 
CInt(IIF(Sequence LIKE "*.*", Left(SEQUENCE, Instr(1, SEQUENCE, ".")-1)),
IIF(IsNumeric(Right(Sequence, Len(SEQUENCE) - Instr(1, SEQUENCE, "."))), CINT(Right(Sequence, Len(SEQUENCE) - Instr(1, SEQUENCE, "."))) ,0))

0
投票

对于两部分层次结构值,您可以使用以下内容:

SELECT Sequence 
FROM MyTable
ORDER BY Int(Sequence), Int(Replace(Sequence,".","0"));

0
投票

您可以使用Val通过这个花哨的表达式订购:

Int(Val([Sequence])), Val(Mid([Sequence], 1 + Len(Str(Int(Val([Sequence]))))))

它也适用于9以上的段落:

1
1.1
1.2
...
1.10
2
2.1
...
10.0
10.11

0
投票

因为我仅限于MS Access SQL功能,并且序列不限于两部分结构,所以我最终采用June7的建议,在我制作表时只添加零,这样它只需使用简单的方法就可以正确排序订购。

谢谢大家的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.