请帮助我,因为我无法做到这一点。
选择此列(columnA)的访问SQL是什么,以便它返回一个结果集,其中包含根据数字排序的不同值,然后是字母。
这是列值:{10A,9C,12D,11G,9B,10C,9R,8T}
我试过'从tblClass顺序选择不同的ColumnA 1' 但它返回{10A,10C,11G,12D,8T,9B,9C,9R}这不是我想要的。
提前谢谢。
答案 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))