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

挑战性问题,如何生成带线的树形结构结果集??
我的库表:
Id                 Name     ParentID
0                   中国                     0
1                   山东                     0
2                   广东                     0
3                   济南                     1
4                   青岛                     1
5                   广州                     2
6                   佛山                     2
7                   东莞                     2
8                   虎门                     2
9                   历下区                 3
10                 白云区                 5

如何根据库表检索生成如下结构的结果集?

□┬中国
    ├┬山东
    │├┬济南
    ││└─历下区
    │└─青岛
    └┬广东
        ├┬广州
        │└─白云区
        ├─佛山
        ├─东莞
        └─虎门

这个问题好像有点复杂哦,不是单纯的行缩进那么简单,还要加上双字节的制表符号组成树结构连线,偶想了半天不知该如何下手,只好偷个懒到这来请教一下有没有那位高人做过,给指点一下,谢谢。

------解决方案--------------------
--参考,邹老大写的方法

--测试数据
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
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/

------解决方案--------------------
如果仅仅是要结果的话.参考一下*---------------------------------------*\
| Subject: