首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

100分求教树型结构分层有关问题,

2012-01-15 
100分求教树型结构分层问题,急createtabletable1(idvarchar(20),pidvarchar(20))inserttable1select东莞市

100分求教树型结构分层问题,急
create   table   table1(id   varchar(20),pid   varchar(20))
insert   table1
select   '东莞市 ', '广东 '
union   all   select   '深圳市 ', '广东 '
union   all   select   '珠海市 ', '广东 '
union   all   select   '长安镇 ', '东莞市 '
union   all   select   '虎门镇 ', '东莞市 '
union   all   select   '锦厦村 ', '长安镇 '
union   all   select   '厦边村 ', '长安镇 '
union   all   select   '成都市 ', '四川省 '
union   all   select   '绵羊市 ', '四川省 '
union   all   select   '金牛区 ', '成都市 '
union   all   select   '五候区 ', '成都市 '


GO
CREATE   function   fn_table(@pid   varchar(20))
returns   @r   table   (
id   varchar(20),pid   varchar(20),lev   int
)
as
begin
        declare   @lev   int
        set   @lev=1
        insert   @r   select   id,pid,@lev   from   table1   where   pid=@pid
        while   exists   (select   id,pid,@lev+1   from   table1   where   pid   in   (select   id   from   @r   where   lev=@lev))
        begin
              insert   @r   select   id,pid,@lev+1   from   table1   where   pid   in   (select   id   from   @r   where   lev=@lev)
              set   @lev=@lev+1
        end
        return  
end
go

select   *   from   dbo.fn_table( '广东 ')


问题的提升,希望能将查询结果一层一层地分层显示出来,其显示结果希望如下
  广东
        --东莞市
                --长安镇
                        --锦厦村
                        --厦边村
                --虎门镇
                        --北栅村
                        --南栅村
        --深圳市
        --珠海市
四川省
        --成都市
            --金牛区
            --武候区
        --绵阳市


请问高手如果是这样显示应该如何操作呢???     100分,搞定后立即结贴.谢谢了


[解决办法]
http://community.csdn.net/Expert/topic/5331/5331207.xml?temp=.5283472
和你的差不多,参考下
[解决办法]
看邹建的方法

--测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001 ',NULL , '山东省 '
UNION ALL SELECT '002 ', '001 ', '烟台市 '
UNION ALL SELECT '004 ', '002 ', '招远市 '
UNION ALL SELECT '003 ', '001 ', '青岛市 '
UNION ALL SELECT '005 ',NULL , '四会市 '


UNION ALL SELECT '006 ', '005 ', '清远市 '
UNION ALL SELECT '007 ', '006 ', '小分市 '

--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT> 0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END

--显示结果
SELECT SPACE(b.Level*2)+ '|-- '+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/

热点排行