Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

关于排序的问题,老师们请帮忙!

yue  发表于:2016-09-05 21:57:38  
复制

表里有LOCATION一列,能否按照先单个字母为首例如A101为先,后两个字母例如CA101的顺序排列呢,谢谢!用表或者查询都行!


最后变成R103等在CA101前面点击下载此附件

 

Top
朱先生 发表于:2016-09-05 23:19:39

 SELECT 底层表.ITEM_NO, 底层表.LOCATION
FROM 底层表
ORDER BY Val(Asc(Mid([LOCATION],1,1)))+Val(IIf(Asc(Mid([LOCATION],2,1))>=65,Asc(Mid([LOCATION],2,1)),0));


 



yue 发表于:2016-09-06 01:05:42

点击下载此附件

老师这个会出现CP408没有在IC等库位上方,还有如果数据多了是不是就不稳定了,您看看



朱先生 发表于:2016-09-06 10:25:19
再共同探讨吧

丘山 发表于:2016-09-11 10:13:05
SELECT IsNumeric(Left([location],1))+IsNumeric(Mid([location],2,1)) AS pxz, 底层表.ITEM_NO, 底层表.LOCATION
FROM 底层表
ORDER BY IsNumeric(Left([location],1))+IsNumeric(Mid([location],2,1)), 底层表.LOCATION;

莫名 发表于:2016-09-11 17:43:20

用了个投机取巧的方法,请参考

SELECT 底层表.ITEM_NO, 底层表.LOCATION
FROM 底层表
ORDER BY IIf(Len([LOCATION])=4,"1"+[LOCATION],[LOCATION]);

感谢丘山的提醒,换成数字都可以

丘山 发表于:2016-09-11 23:16:00

如果位数固定,5楼的长度四位数加"A"应换成加"0"

很显然,如果长度为5位数的字段首字母是A就不行了



西出阳关无故人 发表于:2016-09-14 11:50:10

做一个函数放在模块里(自动从左到右判断非数字的字符的长度,当然你可以根据需要变更规则从右到左判断):

Function NoNumericLongth(ByVal str As String) As Integer
    Dim i
    For i = 1 To Len(str)   '从左到右逐个判断是否为数字
        If IsNumeric(Mid(str, i, 1)) = True Then
            Exit For   '一旦某个字符为数字,就退出循环
        End If
    Next i
    NoNumericLongth= i - 1
End Function
然后建一个查询:

SELECT 底层表.ITEM_NO, 底层表.LOCATION FROM 底层表 ORDER BY NoNumericLongth([LOCATION]), 底层表.LOCATION;



西出阳关无故人 发表于:2016-09-14 11:52:23


zhaoyoulong 发表于:2016-09-20 16:56:17
SELECT 底层表.ITEM_NO, 底层表.LOCATION
FROM 底层表

ORDER BY InStr(LOCATION, Val(LOCATION)), LOCATION;

点击下载此附件



总记录:9篇  页次:1/1 9 1 :