在Access数据库中对数据进行排序,其中列具有数字和字母

时间:2011-07-18 08:10:02

标签: sql ms-access

请帮助我,因为我无法做到这一点。

选择此列(columnA)的访问SQL是什么,以便它返回一个结果集,其中包含根据数字排序的不同值,然后是字母。

这是列值:{10A,9C,12D,11G,9B,10C,9R,8T}

我试过'从tblClass顺序选择不同的ColumnA 1' 但它返回{10A,10C,11G,12D,8T,9B,9C,9R}这不是我想要的。

提前谢谢。

5 个答案:

答案 0 :(得分:5)

您可以使用Val()函数。从帮助主题:“ Val函数停止读取第一个字符处的字符串,它无法识别为数字的一部分

Val(10A)会给你10,Val(9C)会给你9,依此类推。因此,在您的查询中,首先按Val(ColumnA)排序,然后按ColumnA排序。

SELECT DISTINCT Val([ColumnA]) AS number_part, ColumnA
FROM tblClass
ORDER BY Val([ColumnA]), ColumnA;

答案 1 :(得分:1)

SELECT DISTINCT ColumnA
FROM tblClass 
ORDER BY CInt(LEFT(ColumnA,len(ColumnA)-1)), RIGHT(ColumnA,1);

如果最后一个字符是一个字母而其他字符是一个数字。

答案 2 :(得分:0)

您的数据类型是一个字符串,因此它正确排序,以获得您希望的结果,您必须将值拆分为数字和字母部分,然后先按数字排序,然后按字母排序。不是Access程序员,我无法帮助您准确地做到这一点。

答案 3 :(得分:0)

按1排序?

你不是指ColumnA的订单吗?

SELECT DISTINCT ColumnA
FROM tblClass
ORDER BY ColumnA

答案 4 :(得分:-1)

我有一个类似的问题,并且使用了一种哑巴解决方法:

更改{10A,10C,11G,12D,8T,9B,9C,9R}的列表

通过在每个<10数字前加0,将

插入{10A,10C,11G,12D,08T,09B,09C,09R}中。

现在所有项目的长度相同,访问权限将正确分类为{08T,09B,09C,09R,10A,10C,11G,12D} 。

为此,我将此列复制到excel列A,并使用IF(LEN(A2)<3,concatenate(“ 0”,A2))