查询语句帮忙
id   name            parentid      code 
 0      a                     root                  0100 
 1      a1                  0                           0101 
 2      a2                  0                           0102 
 3      b                     root                  0200 
 4      b1                  3                           0201 
 如何变成 
 a   ,      a1   ,   a2    
 b   ,      b1   ,               
------解决方案--------------------用函数 
------解决方案--------------------Create Function F_GetChildren(@id Varchar(10)) 
 ReturnS Varchar(8000) 
 AS 
 Begin 
 	Declare @S Varchar(8000) 
 	Select @S = name From TEST Where id = @id 
 	Select @S = @S +  ',  ' + name From TEST Where parentid = @id 
 	Return @S 
 End 
 GO 
 Select dbo.F_GetChildren(id) As name From TEST Where parentid =  'root ' 
 Go
------解决方案--------------------create function fn_tree( 
 @id varchar(20)) 
 returns varchar(400) 
 as 
 begin 
     declare @r varchar(400) 
     select @r=name from tablename where id=@id 
     if exists (select 1 from tablename where parentid=@id) 
     select @r=@r+ ', '+dbo.fn_tree(id) from tablename where parentid=@id order by id 
     return @r 
 end   
 go   
 --调用 
 select dbo.fn_tree(id) as Tree 
 from tablename 
 where parentid= 'root '
------解决方案----------------------創建測試環境 
 Create Table TEST 
 (id	Int, 
  name	Varchar(10), 
  parentid	Varchar(10), 
  code	Varchar(20)) 
 Insert TEST Select 0,   'a ',          'root ',      '0100 ' 
 Union All Select 1,   'a1 ',        '0 ',          '0101 ' 
 Union All Select 2,   'a2 ',        '0 ',          '0102 ' 
 Union All Select 3,   'b ',         'root ',       '0200 ' 
 Union All Select 4,   'b1 ',       '3 ',           '0201 ' 
 GO   
 -- 查询处理 
 DECLARE  
 	@s nvarchar(4000), @i int 
 SELECT TOP 1 
 	@s =  ' ', 
 	@i = COUNT(*) 
 FROM TEST 
 WHERE parentid  <>   'root ' 
 GROUP BY parentid  
 ORDER BY COUNT(*) DESC   
 WHILE @i >  0 
 	SELECT 
 		@s = N ', 
 	 ' + QUOTENAME( 'col ' + RTRIM(@i + 1))  
 			+ N '=MAX(CASE rid WHEN  ' + RTRIM(@i)  
 			+ N ' THEN name ELSE N ' ' ' ' END) ' 
 			+ @s, 
 		@i = @i - 1   
 EXEC(N ' 
 SELECT  
 	col1 = MAX(CASE rid WHEN 0 THEN name END) 
 	 ' + @s + N ' 
 FROM( 
 SELECT  
 	parentid = id, name,  
 	rid = 0  
 FROM TEST 
 WHERE parentid =  ' 'root ' ' 
 UNION ALL 
 SELECT  
 	parentid, name,  
 	rid = (SELECT COUNT(*) FROM TEST WHERE  parentid = A.parentid AND id  <= A.id) 
 FROM TEST A 
 WHERE parentid  <>   ' 'root ' ' 
 )A 
 GROUP BY parentid 
  ') 
 GO   
 DROP TABLE TEST