我正在尝试按字段排序,该字段可以包含数字,也可以包含字母后跟数字。(但不是两者的混合)。
我的升序字段是
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]);发布于 2014-11-23 18:30:08
嗯,我明白你的意思了。问题似乎是ORDER BY子句中的表达式没有一致的数据类型:对于某些行,它的计算结果为Integer,而对于其他行,它的计算结果为字符串。
下面的方法适用于我,因为这个ORDER BY子句中的表达式总是返回一个字符串:
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]);发布于 2014-11-23 19:08:14
如果我没理解错的话,这个查询应该按照你想要的顺序返回行:
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列拆分为两个不同的列:一个用于字母数字部分(如果存在),另一个用于数字部分。
https://stackoverflow.com/questions/27087195
复制相似问题