sqlserver排序问题.生成(父-->子-->孙-->重孙)的结构.

sunylf 2007-06-22 05:53:40
如何由
表1
父 子
A, A1
A, A2
A1, A11
A1, A12
A11, D
A2, A21
A2, A22
A21, F

得到
结果为: (父 -> 子 ->孙 以此类推)
表2
A, A1
A1, A11
A11, D
A1, A12
A, A2
A2, A21
A21, F
A2, A22
请高手指点!
...全文
255 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunylf 2007-06-23
  • 打赏
  • 举报
回复
多谢了!
paoluo 2007-06-23
  • 打赏
  • 举报
回复
sunylf() ( ) 信誉:100 Blog 加为好友 2007-06-23 10:31:05 得分: 0


还有就是,你能告诉我你是怎么找到这个方法的吗?


----------------

很簡單的原因,以前有人寫過。 :)
paoluo 2007-06-23
  • 打赏
  • 举报
回复
sunylf() ( ) 信誉:100 Blog 加为好友 2007-06-23 10:28:27 得分: 0


不错,不过不知在几百万条数据中性能如何?


-----------
性能可能會受一些影響,但是有時候為了實現效果,多少就要捨棄些性能。
sunylf 2007-06-23
  • 打赏
  • 举报
回复
还有就是,你能告诉我你是怎么找到这个方法的吗?
sunylf 2007-06-23
  • 打赏
  • 举报
回复
不错,不过不知在几百万条数据中性能如何?
paoluo 2007-06-23
  • 打赏
  • 举报
回复
--測試
Select * From TEST Order By dbo.F_GetPath(C)

改為

--測試
Select *, dbo.F_GetPath(C) As Path From TEST Order By dbo.F_GetPath(C)

你就可以查看了
sunylf 2007-06-23
  • 打赏
  • 举报
回复
paoluo(一天到晚游泳的鱼),
能帮我解释下
F_GetPath(C)这个函数么?返回什么样的结果?如何获取这个函数的结果?
小弟在此谢过了.
fa_ge 2007-06-23
  • 打赏
  • 举报
回复
看起來有點象BOM表
paoluo 2007-06-23
  • 打赏
  • 举报
回复
--建立測試環境
Create Table TEST(P Varchar(10), C Varchar(10))
Insert Into TEST
Select 'A', 'A1'
Union Select 'A', 'A2'
Union Select 'A1', 'A11'
Union Select 'A1', 'A12'
Union Select 'A11', 'D'
Union Select 'A2', 'A21'
Union Select 'A2', 'A22'
Union Select 'A21', 'F'
GO
--建立函數
Create Function F_GetPath(@C Varchar(10))
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @C = P, @S = C From TEST Where C = @C
While @@ROWCOUNT > 0
Select @C = P, @S = C + '-' + @S From TEST Where C = @C
Return @S
End
GO
--測試
Select * From TEST Order By dbo.F_GetPath(C)
GO
--刪除測試環境
Drop Table TEST
Drop Function F_GetPath
--結果
/*
P C
A A1
A1 A11
A11 D
A1 A12
A A2
A2 A21
A21 F
A2 A22
*/
paoluo 2007-06-23
  • 打赏
  • 举报
回复
--建立函數
Create Function F_GetPath(@C Varchar(10))
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @C = P, @S = C From TEST Where C = @C
While @@ROWCOUNT > 0
Select @C = P, @S = C + '-' + @S From TEST Where C = @C
Return @S
End
GO
--測試
Select * From TEST Order By dbo.F_GetPath(C)
sunylf 2007-06-23
  • 打赏
  • 举报
回复
100分,没人要啊?
sunylf 2007-06-22
  • 打赏
  • 举报
回复
楼上的大哥,结果呢?
lwl0606 2007-06-22
  • 打赏
  • 举报
回复
Create table table1(p nvarchar(10),C nvarchar(10))
insert into table1
select 'A', 'A1'
union select 'A', 'A2'
union select 'A1', 'A11'
union select 'A1', 'A12'
union select 'A11', 'D'
union select 'A2', 'A21'
union select 'A2', 'A22'
union select 'A21', 'F'

22,209

社区成员

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

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