在表 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
请高手帮忙!最好能给出代码
序号 代号 名称
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
请高手帮忙!最好能给出代码
UNION
SELECT * FROM table1 WHERE Right(序号,1) = ')' ORDER BY 序号
from tb
order by iif(right(序号,1)=')',1,0),cint(replace(序号,")",""))iif(right(序号,1)=')',1,0)
序号如果包含)号,排序是1,否则排序为0。这样所有无)号的就排在所有有)的之前cint(replace(序号,")",""))
将序号的数字部分转换为数字类型排序,文本类型大小排序规则与数字不同
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 而得不到想要的结果!?
还请高手不吝赐教!!
FROM table1
ORDER BY len(序号)在ACCESS中测试过了。
但你的序号是字符型,不可能排出123顺序,
只能把有括号的放在一起,没括号的放在一起。
from tb
order by iif(right(序号,1)=")",1,0),val(序号)
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 反向函数(序号) desc
SELECT * from 1 order by len(序号) ,序号 后面的序号很重要,这个是分组后的再次排序
1 028 s
2 043 l
3 001 a
1) 023 g
2) 081 o
3) 094 k
用len就楼主的示例是可以的,如果序号的数字部分有多位,这样就不行了
测试通过!select * from table order by right(id,1)<>")",val(id)
已经解决了。
使用了vbman2003 的方法
再次表示感谢!!