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'
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'
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)
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
*/
能帮我解释下
F_GetPath(C)这个函数么?返回什么样的结果?如何获取这个函数的结果?
小弟在此谢过了.
Select * From TEST Order By dbo.F_GetPath(C)改為--測試
Select *, dbo.F_GetPath(C) As Path From TEST Order By dbo.F_GetPath(C)你就可以查看了
不错,不过不知在几百万条数据中性能如何?
-----------
性能可能會受一些影響,但是有時候為了實現效果,多少就要捨棄些性能。
还有就是,你能告诉我你是怎么找到这个方法的吗?
----------------很簡單的原因,以前有人寫過。 :)