当前位置:编程学习 > VB >>

向高手求助!!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明显不对吧? --------------------编程问答--------------------


select *
from tb
order by iif(right(序号,1)=")",1,0),val(序号)

--------------------编程问答-------------------- 用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)
--------------------编程问答-------------------- 1 楼中用 Union 不会错的,你是否将数据绑定到列表控件,该控件又进行的排序? --------------------编程问答--------------------

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 ,  数据库(包含打印,安装,报表)
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,