向高手求助!!access表中数据的复杂排序
在表 table1 中有以下字段序号 代号 名称
3 001 a
1) 023 g
2 043 l
3) 094 k
1 028 s
2) 081 o
如何实现以下排序结果
1 028 s
2 043 l
3 001 a
1) 023 g
2) 081 o
3) 094 k
请高手帮忙!最好能给出代码 --------------------编程问答--------------------
SELECT * FROM table1 WHERE Right(序号,1) <> ')' ORDER BY 序号--------------------编程问答-------------------- 还可以这样:
UNION
SELECT * FROM table1 WHERE Right(序号,1) = ')' ORDER BY 序号
select *
from tb
order by iif(right(序号,1)=')',1,0),cint(replace(序号,")",""))
iif(right(序号,1)=')',1,0)
序号如果包含)号,排序是1,否则排序为0。这样所有无)号的就排在所有有)的之前
cint(replace(序号,")",""))
将序号的数字部分转换为数字类型排序,文本类型大小排序规则与数字不同
--------------------编程问答--------------------
--------------------编程问答-------------------- 谢谢,各位!!
select *
from tb
order by iif(right(序号,1)=")",1,0),cint(replace(序号,")",""))
一楼给出的答案我也用过,可结果是
1 028 s
1) 023 g
2 043 l
2) 081 o
3 001 a
3) 094 k
而得不到想要的结果!?
还请高手不吝赐教!!
--------------------编程问答-------------------- SELECT *
FROM table1
ORDER BY len(序号)
在ACCESS中测试过了。
但你的序号是字符型,不可能排出123顺序,
只能把有括号的放在一起,没括号的放在一起。 --------------------编程问答-------------------- 楼主只是个示例,如果有多位数字,用len明显不对吧? --------------------编程问答--------------------
--------------------编程问答-------------------- 用UNION也可以:
select *
from tb
order by iif(right(序号,1)=")",1,0),val(序号)
--------------------编程问答-------------------- 1 楼中用 Union 不会错的,你是否将数据绑定到列表控件,该控件又进行的排序? --------------------编程问答--------------------
select 序号,代号,名称
from (
SELECT '0' as id,序号,代号,名称 FROM tb WHERE Right(序号,1) <> ')'
UNION
SELECT '1',序号,代号,名称 FROM tb WHERE Right(序号,1) = ')'
)
order by id,val(coid)
SELECT * from 1 order by len(序号) ,序号
--------------------编程问答--------------------
已经测试通过
其实还可以这么排序,
select * from 1 order by 反向函数(序号) desc
--------------------编程问答--------------------
SELECT * from 1 order by len(序号) ,序号
后面的序号很重要,这个是分组后的再次排序 --------------------编程问答-------------------- len(序号) 的缺陷 6 楼已经指出了。 --------------------编程问答-------------------- SELECT * FROM table1 ORDER BY Len(序号),序号
--------------------编程问答-------------------- 后面再加序号是没有用的.
它是文本类型的字段
如果到了10,
排下来的结果是
1
10
2
3
4
..... --------------------编程问答-------------------- SELECT * FROM table1 ORDER BY len(序号), 序号;
测试结果:
序号 代号 名称
1 028 s
2 043 l
3 001 a
1) 023 g
2) 081 o
3) 094 k --------------------编程问答-------------------- of123兄:
用len就楼主的示例是可以的,如果序号的数字部分有多位,这样就不行了 --------------------编程问答--------------------
我想我这个是一定可以的
测试通过!
select * from table order by right(id,1)<>")",val(id)
--------------------编程问答-------------------- 多谢各位!
已经解决了。
使用了vbman2003 的方法
再次表示感谢!!
补充:VB , 数据库(包含打印,安装,报表)