日期:2014-05-18  浏览次数:20565 次

查询时,记录父子排序问题?
表中的记录按类分为父子关系,子的parentid为父的Rowid,父记录的parentid为空

结构如下:

行号               标题                 城市         国家        时间                     父子关系
---------------------------
1                     测试1               深圳市     中国       2007-03-02            

2                     试测2               广州市     中国       2007-04-22

3                     测试1子1         南山区                   2007-03-25                 1

4                     测试2子1         海珠区                   2007-04-30                 2

5                     测试1子2         宝安区                   2007-05-03                 1

6                     测试3               北京市     中国       2006-05-30

7                     测试2子2         越秀区                   2007-04-29                 2

8                     测试1子3         罗湖区                   2007-04-22                 1

9                     测试3子1         宣武区                   2006-12-22                 3

..............................

标题不一样

查询父级按时间倒序,每个父级后跟子记录,子记录按时间正序,谢谢!



------解决方案--------------------
create function get_a_n(@id int)
returns varchar(32) as
begin
declare @r_id int,@dep int,@i int
select @dep=100,@i=1,@r_id=@id
while exists(select * from 表名 where 行号=@id and isnull(父子关系,0) <> 0)
select @i=@i*@dep,@id=父子关系,@r_id=@r_id+@id*@i from 表名 where 行号=@id and isnull(父子关系,0) <> 0
return cast(@r_id as varchar(32))
end
go

--查询
select * from adress order by dbo.get_a_n(行号)
------解决方案--------------------
id大的时间应该在后,所以没有处理
------解决方案--------------------
笨方法:
create table test
( id int ,
title varchar(50),
city varchar(10),
country varchar(10),
t_time datetime,
parent_id int)
insert into test
select 1 , '測試1 ' , '深圳市 ', '中國 ', '2007-03-02 ',0 union all