主题:排序和分组的问题
fyren
[专家分:230] 发布于 2009-09-22 15:09:00
还是上次门牌号的问题!
1、因为门牌号码的支号“-”,所以号码字段用字符型,用不了数值型,问题就来,当SQL查询输出按门牌号排序时出现41、42、43、4、59、58、……5这种情况,即位数多的排前面了;
2、门牌号一般是左单号右双号分组来输出,问题就是如何实现单双号分组。
大家帮我看看啊!
先谢谢各位了!
回复列表 (共5个回复)
沙发
sywzs [专家分:5650] 发布于 2009-09-23 04:17:00
在表中添加一个辅助字段,其值由门牌号按一定规律转换,如 1_041、2_042、1_043、2_004、1_059、2_058、…… 1_005
板凳
martine [专家分:4950] 发布于 2009-09-23 09:56:00
单双号分组就是号码除以2, 互减,能整除的就是双,不能就是单
3 楼
fyren [专家分:230] 发布于 2009-09-24 12:59:00
[quote]在表中添加一个辅助字段,其值由门牌号按一定规律转换,如 1_041、2_042、1_043、2_004、1_059、2_058、…… 1_005[/quote]
谢谢了!再问一下
这个是最好的办法吗?
4 楼
fyren [专家分:230] 发布于 2009-09-24 13:18:00
[quote]单双号分组就是号码除以2, 互减,能整除的就是双,不能就是单[/quote]
关键这个字段不能是字符型的,又不是纯数字,门牌有1-1、100-2之类的支号有时还有1-1-1的支号下支号
5 楼
Gleam [专家分:3100] 发布于 2009-09-24 17:46:00
单号:
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。
不知道你是不是要的这个??
我来回复