问个联合查询和字符串拼接的问题
需求是这样的,一张作者author表,一张book表: 
 author表                                       book 
 ------                     ----- 
 id         authorname            id         bookname         writerid 
 1            writer1                     1            book1a               1 
 2            writer2                     2            book1b               1 
                                                          3            book1c               1 
                                                          4            book2a               2 
                                                          5            book2b               2 
 我的存储过程该怎么写才能得到如下的查询结果: 
 id         authorname         bookname 
 1            writer1                  book1a;book1b;book1c 
 2            writer2                  book2a;book2b 
 前面不小心结贴了: 
 http://community.csdn.net/Expert/topic/5746/5746872.xml?temp=.1509058 
------解决方案--------------------联接查询不是问题,字符串合并可以参考这个: 
 --生成测试数据 
 create table 表(部门 int,人员 varchar(20)) 
 insert into 表 select 1, '张三 ' 
 insert into 表 select 1, '李四 ' 
 insert into 表 select 1, '王五 ' 
 insert into 表 select 2, '赵六 ' 
 insert into 表 select 2, '邓七 ' 
 insert into 表 select 2, '刘八 ' 
 go   
 --创建用户定义函数 
 create function f_str(@department int) 
 returns varchar(8000) 
 as 
 begin 
     declare @ret varchar(8000) 
     set @ret =  ' ' 
     select @ret = @ret+ ', '+人员 from 表 where 部门 = @department 
     set @ret = stuff(@ret,1,1, ' ') 
     return @ret  
 end 
 go     
 --执行 
 select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门 
 go   
 --输出结果 
 /* 
 部门  人员 
 ----  -------------- 
 1     张三,李四,王五 
 2     赵六,邓七,刘八 
 */     
 --删除测试数据 
 drop function f_str 
 drop table 表 
 go
------解决方案-----------------------创建自定义函数  
 Create Function Fn_Merge(@ID Int) 
    Returns Varchar(1000) 
 As  
    Begin 
       Declare @sql Varchar(1000) 
       Set @sql= ' ' 
       Select @sql=@sql+ ', '+[bookname] From book Where Writerid=@ID 
       Return Stuff(@sql,1,1, ' ') 
    End 
 Go   
 ---调用自定义函数查询结果 
 Select  
       ID, 
       authorname, 
       bookname=(Select dbo.Fn_Merge(writerid) From book Where writerid=A.ID Group By writerid) 
 From author As A