如何自动生成树结构?

welunzhu 2011-11-10 11:18:59
有一个表格设计为

T 1:

ID 自动编号

PNAME 产品名称

PID 隶属父目录(最高级默认为0)

数据为

1 钢质 0
2 铜质 0
3 铁质 0
4 螺帽 1
5 螺丝 1
6 钉 1
7 办公用品 1
8 生活用品 1
9 桌子 7
10 水龙头 8
11 椅子 7

我想生成一个树结构。

|---钢质
| |---螺帽
| |---螺丝
| |---钉
| |---办公用品
| | |--桌子
| | |--椅子
| |---生活用品
| |--水龙头
|---铜质
|---铁质


我想在SQL 里生成每一个类的隶属关系至顶级时,中间有几层关系,这个数据,在前台就直接输出几个空格或(-)来表示就行。



或者另外的方法?
请教如何实现?






...全文
123 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-11-10
  • 打赏
  • 举报
回复
--> --> (Roy)生成測試數據

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] nvarchar(2),[PNAME] nvarchar(4),[PID] int)
Insert #T
select N'1',N'钢质',0 union all
select N'2',N'铜质',0 union all
select N'3',N'铁质',0 union all
select N'4',N'螺帽',1 union all
select N'5',N'螺丝',1 union all
select N'6',N'钉',1 union all
select N'7',N'办公用品',1 union all
select N'8',N'生活用品',1 union all
select N'9',N'桌子',7 union all
select N'10',N'水龙头',8 union all
select N'11',N'椅子',7

Go
;with b
as
(
Select *,cast('|---' as nvarchar(1000)) as Show,ord=cast(right(1000+ID,3) as nvarchar(50)) from #T where PID=0
union all
select a.*,cast('| '+b.Show as nvarchar(1000)) as show,ord=cast(b.ord+right(1000+a.ID,3)as nvarchar(50))
from #T as a inner join b on a.PID=b.ID
)
select Show+[PNAME] from b order by ord
/*
|---钢质
| |---螺帽
| |---螺丝
| |---钉
| |---办公用品
| | |---桌子
| | |---椅子
| |---生活用品
| | |---水龙头
|---铜质
|---铁质
*/

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧