我尝试按字段排序,可能包含数字或字母后跟数字。 (但不是两者的混合)。
我的排序升序字段是
sField: IIf(Val([AlbumTrack]) > 0, CInt([AlbumTrack]), [AlbumTrack])
但是数字没有正确排序。字母和数字似乎是。我做错了什么?
数据的例子是7,8,9,10,11 A3,A4,A5,B1,B2,C1
我的sql是
SELECT DISTINCTROW
CDTracks.AlbumCat, CDTracks.AlbumTrack,
IIf(Val([AlbumTrack])>0,CInt([AlbumTrack]),[AlbumTrack]) AS sField
FROM
CDTracks
WHERE
(((CDTracks.AlbumCat) = "RCA Victor LSP 2525"))
ORDER BY
IIf(Val([AlbumTrack]) > 0, CInt([AlbumTrack]), [AlbumTrack]);
答案 0 :(得分:2)
以下对我有用,因为此ORDER BY子句中的表达式始终返回String:
SELECT DISTINCTROW
CDTracks.AlbumCat, CDTracks.AlbumTrack
FROM
CDTracks
WHERE
(((CDTracks.AlbumCat) = "RCA Victor LSP 2525"))
ORDER BY
IIf(Val([AlbumTrack]) > 0, Right("00000" & [AlbumTrack], 5), [AlbumTrack]);
答案 1 :(得分:1)
如果我正确理解了您的问题,此查询将按您想要的顺序返回行:
SELECT DISTINCTROW
CDTracks.AlbumCat, CDTracks.AlbumTrack
FROM
CDTracks
WHERE
CDTracks.AlbumCat = "RCA Victor LSP 2525"
ORDER BY
IIf(Val([AlbumTrack]) > 0, Null, Left([AlbumTrack], 1)),
IIf(Val([AlbumTrack]) > 0, CInt([AlbumTrack]), CInt(MID([AlbumTrack], 2)));
这会将AlbumTrack列拆分为两个不同的列:一个用于字母数字部分(如果存在),一个用于数字部分。