求一条SQL语句,有点难度
请教个问题: 
 有两个表, 
 A表字段 
 SID,F1,F2,.... 
 B表字段 
 ID,SID(对应A的SID),T,V   
 现在是这样的,A表记录的是一个任务的一些属性, 
 B表记录的是这个任务的工作时间,其中时间有很都中,比如有技术,交流,调查等(种类用T区别,V代表时间) 
 现在要得到的结果是这样的   
 SID,F1,F2...,V1,V2,V3... 
 这边的   V1,v2,v2是根绝T区别出来的,但是都属于SID这个任务的时间, 
 请问下应该怎么写查询语句, 
 就是说把属于任务SID的所有分类的时间也一起查询出来显示在结果表的字段中   
 请适当考虑下性能,自己写了条SQL语句,但是不是很满意,怕给大家思维定势了,所以不把自己写的发出来了。先谢过大家了! 
------解决方案--------------------create table A(SID int,   F1 int,  F2 int) 
 insert into A values(1,    2,    3) 
 insert into A values(2,    2,    1) 
 insert into A values(3,    3,    2) 
 create table B(BID int, SID int,  T int,  V int) 
 insert into B values(1,    1,     1,    4) 
 insert into B values(2,    1,     2,   2) 
 insert into B values(3,    2,     1,    3) 
 insert into B values(4,    2,     2,    4) 
 insert into B values(5,    3,     1,    5) 
 insert into B values(6,    3,     2,    2) 
 go   
 --静态SQL,即t的值固定为1,2 
 select sid,f1,f2, 
   max(case when t = 1 then v else 0 end) v1, 
   max(case when t = 2 then v else 0 end) v2 
 from 
 ( 
   select a.*,b.t,b.v from a,b where a.sid = b.sid 
 ) t 
 group by sid,f1,f2   
 --动态sql,即T的值不固定 
 declare @sql varchar(8000) 
 set @sql =  'select SID ,  F1 , F2 ' 
 select @sql = @sql +  ' , sum(case t when  ' ' ' + cast(t as varchar) +  ' ' ' then v else 0 end) [V ' + cast(t as varchar) +  '] ' 
 from (select distinct t from (select a.sid,a.f1,a.f2,b.t,b.v from a,b where a.sid = b.sid) m) as a 
 set @sql = @sql +  ' from (select a.sid,a.f1,a.f2,b.t,b.v from a,b where a.sid = b.sid) m group by SID ,  F1 , F2 ' 
 exec(@sql)   
 drop table A,B   
 /* 
 sid         f1          f2          v1          v2           
 ----------- ----------- ----------- ----------- -----------  
 1           2           3           4           2 
 2           2           1           3           4 
 3           3           2           5           2   
 (所影响的行数为 3 行)   
 SID         F1          F2          V1          V2           
 ----------- ----------- ----------- ----------- -----------  
 1           2           3           4           2 
 2           2           1           3           4 
 3           3           2           5           2 
 */
------解决方案--------------------select a.sid,a.f1,a.f2, 
 max(case when t=1 then b.v else null end )as v1, 
 max(case when t=2 then b.v else null end )as v2 
 from a ,b  
 where a.id =b.sid 
 group by a.sid,a.f1,a.f2   
 这个语句效率还可以的。(刚才的语句少了“when”)