首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当排序的列同时包含数字和字母数字值时,SQL排序失败

问当排序的列同时包含数字和字母数字值时,SQL排序失败
EN

Stack Overflow用户
提问于 2014-11-23 16:55:46
回答 2查看 331关注 0票数 1

我正在尝试按字段排序,该字段可以包含数字,也可以包含字母后跟数字。(但不是两者的混合)。

我的升序字段是

代码语言:javascript
复制
 sField: IIf(Val([AlbumTrack]) > 0, CInt([AlbumTrack]), [AlbumTrack])

但是数字排序不正确。字母和数字似乎是。我做错了什么?

数据示例为7、8、9、10、11 A3、A4、A5、B1、B2、C1

我的sql是

代码语言:javascript
复制
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]);
EN

回答 2

Stack Overflow用户

发布于 2014-11-23 18:30:08

嗯,我明白你的意思了。问题似乎是ORDER BY子句中的表达式没有一致的数据类型:对于某些行,它的计算结果为Integer,而对于其他行,它的计算结果为字符串。

下面的方法适用于我,因为这个ORDER BY子句中的表达式总是返回一个字符串:

代码语言:javascript
复制
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]);
票数 2
EN

Stack Overflow用户

发布于 2014-11-23 19:08:14

如果我没理解错的话,这个查询应该按照你想要的顺序返回行:

代码语言:javascript
复制
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列拆分为两个不同的列:一个用于字母数字部分(如果存在),另一个用于数字部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27087195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档