日期:2014-05-19  浏览次数:20586 次

请问一条SQL语句的写法
A表结构如下:     Id       OrganName    
-------------------------  
1           运输板块\集团决策层\  
2           集团执行层\集团董事局\运输板块管理委员会  
3           运输板块管理委员会\航空运输板块领导    

B表结构:     Id       OrganName           OrganId  
----------------------------------------  
1           运输板块               123  
2           集团决策层           444  
3           集团执行层           666  
4           集团董事局           522    
5           运输板块管理委员会                         856  
6           航空运输板块领导 043      

运行的结果     Id       OrganName     OrganId
  -------------------------------  
1           运输板块\集团决策层\   123、444  
2           集团执行层\集团董事局\运输板块管理委员会   666、522、856   3           运输板块管理委员会\航空运输板块领导                 856、043

------解决方案--------------------
Create Function F_GetOrganId(@OrganName Nvarchar(1000))
Returns Varchar(1000)
As
Begin
Declare @S Varchar(1000)
Select @S = ' '
Select @S = @S + '\ ' + Rtrim(OrganId) From B Where CharIndex( '\ ' + OrganName + '\ ' , '\ ' + @OrganName + '\ ') > 0
Select @S = Stuff(@S, 1, 1, ' ')
Return @S
End
GO
Select
Id,
OrganName,
dbo.F_GetOrganId(OrganName) As OrganId
From
A
GO
--Result
/*
Id OrganName OrganId
1 运输板块\集团决策层 123\444
2 集团执行层\集团董事局\运输板块管理委员会 666\522\856
3 运输板块管理委员会\航空运输板块领导 856\43
*/
------解决方案--------------------
--“\”改用“、”
Create Function F_GetOrganId(@OrganName Nvarchar(1000))
Returns Varchar(1000)
As
Begin
Declare @S Varchar(1000)
Select @S = ' '
Select @S = @S + '、 ' + Rtrim(OrganId) From B Where CharIndex( '\ ' + OrganName + '\ ' , '\ ' + @OrganName + '\ ') > 0
Select @S = Stuff(@S, 1, 1, ' ')
Return @S
End