我用的vs2010+access2003,但是我想sql语句都是一样的。描述如下:
我有一个表,其中有一列是 XiangName
1.1.1
1.1.2
2.1.1
2.2.1
2.2.1.1
2.2.1.2
2.2.2
2.2.3
3.1.1
.....
我的问题是:我想用一个查询,按这种顺序显示,因为经过插入、删除之后,实际数据库中已经不是这个顺序了,如我现在删除了2.1.1行的数据,当我再次插入2.1.1时,确在表的最后,或者我新增了1.1.3项数据行,显示时想让其显示在1.1.2之后。(而在数据库中实际插入到了最后),麻烦请教。
我有一个表,其中有一列是 XiangName
1.1.1
1.1.2
2.1.1
2.2.1
2.2.1.1
2.2.1.2
2.2.2
2.2.3
3.1.1
.....
我的问题是:我想用一个查询,按这种顺序显示,因为经过插入、删除之后,实际数据库中已经不是这个顺序了,如我现在删除了2.1.1行的数据,当我再次插入2.1.1时,确在表的最后,或者我新增了1.1.3项数据行,显示时想让其显示在1.1.2之后。(而在数据库中实际插入到了最后),麻烦请教。
你一共有几级?
不行的话试下select * from tb order by replace(XiangName,'.','')
select * from tb order by XiangName
--这个什么结果?
排一下序就好了
我用的vs2010+access2003,但是我想sql语句都是一样的。描述如下:
我有一个表,其中有一列是 XiangName
1.1.1
1.1.2
2.1.1
2.2.1
2.2.1.1
2.2.1.2
2.2.2
2.2.3
3.1.1
.....我的问题是:我想用一个查询,按这种顺序显示,因为经过插入、删除之后,
实际数据库中已经不是这个顺序了,如我现在删除了2.1.1行的数据,
当我再次插入2.1.1时,确在表的最后,或者我新增了1.1.3项数据行,
显示时想让其显示在1.1.2之后。(而在数据库中实际插入到了最后),麻烦请教。
if object_id('#tb') is not null
drop table #tb
go
create table #tb(name varchar(100))
go
insert into #tb
select '1.1.1' union all
select '1.1.2' union all
select '2.1.1' union all
select '2.2.1' union all
select '2.2.1.1' union all
select '2.2.1.2' union all
select '2.2.1.2' union all
select '2.2.2' union all
select '2.2.3' union all
select '3.1.1' select * from #tb
group by name
--我的问题是:我想用一个查询,按这种顺序显示,因为经过插入、删除之后,
实际数据库中已经不是这个顺序了,如我现在删除了2.1.1行的数据,
当我再次插入2.1.1时,确在表的最后,或者我新增了1.1.3项数据行,
显示时想让其显示在1.1.2之后。(而在数据库中实际插入到了最后),麻烦请教。--//现在删除2.1.1
delete #tb where name='2.1.1'
--查看结果
select * from #tb
group by name
--插入1.1.3
insert into #tb values('1.1.3')
--查看结果
select * from #tb
group by name
--//最后结果
name
----------------------------------------------------------------------------------------------------
1.1.1
1.1.2
1.1.3
2.2.1
2.2.1.1
2.2.1.2
2.2.2
2.2.3
3.1.1(9 行受影响)
在access 里,要用 instr 反复取出各位,并转换成数值,然后用这些数值依次排序,比较麻烦,类似于:
order by val(mid(XiangName,1,instr(XiangName,".")-1)),
val(mid(XiangName,instr(XiangName,".")+1,instr(instr(XiangName,".")+1,XiangName,".")-instr(XiangName,".")))这儿是前两组,还有的话,得继续取后面各组.