回 帖 发 新 帖 刷新版面

主题:排序和分组的问题

还是上次门牌号的问题!
1、因为门牌号码的支号“-”,所以号码字段用字符型,用不了数值型,问题就来,当SQL查询输出按门牌号排序时出现41、42、43、4、59、58、……5这种情况,即位数多的排前面了;
2、门牌号一般是左单号右双号分组来输出,问题就是如何实现单双号分组。
大家帮我看看啊!
先谢谢各位了!

回复列表 (共5个回复)

沙发

在表中添加一个辅助字段,其值由门牌号按一定规律转换,如 1_041、2_042、1_043、2_004、1_059、2_058、…… 1_005

板凳

单双号分组就是号码除以2, 互减,能整除的就是双,不能就是单

3 楼

[quote]在表中添加一个辅助字段,其值由门牌号按一定规律转换,如 1_041、2_042、1_043、2_004、1_059、2_058、…… 1_005[/quote]
谢谢了!再问一下
这个是最好的办法吗?

4 楼

[quote]单双号分组就是号码除以2, 互减,能整除的就是双,不能就是单[/quote]
关键这个字段不能是字符型的,又不是纯数字,门牌有1-1、100-2之类的支号有时还有1-1-1的支号下支号

5 楼

单号:
SELECT * FROM 表 WHERE MOD( INT( VAL( ALLTRIM( LEFT( 表.门牌, AT("-",表.门牌)-1)))) , 2 )= 1
同理,双号SELECT * FROM 表 WHERE MOD( INT( VAL( ALLTRIM( LEFT( 表.门牌, AT("-",表.门牌)-1)))) , 2 )= 0
这是按照第一个数字排列的,如12-5,取12。
不知道你是不是要的这个??

我来回复

您尚未登录,请登录后再回复。点此登录或注册