两表横向联合的sql问题
有两个表: 
 表A: 
       id            data               type 
       0001         26                  AA1 
       0002         23                  AA1 
       0003         56                  AA1 
       0004         25                  AA1   
 表B: 
       id            data               type 
       0001         24                  AA0 
       0002         26                  AA0 
       0005         23                  AA0 
       0001         26                  AA2 
       0006         26                  AA2 
 其中b表的type可以有多个值,如AA3、AA4、AB1等等   
 想获得的结果是: 
       id         AA0-data      AA1-data      AA2-data 
    0001      24                           26                     26 
    0002      26                           23 
    0003                                       56                               
    0004                                       25 
    0005      23 
    0006                                                                     26   
 即:查询的结果包含了两表的所有的id,并且b表中type有几种值,查询后的列数就是(其值的个数+a表type列中值的个数)。   
 请问这样的问题有什么办法来实现? 
 如果一条sql实现不了,还有什么其他的办法呢?或者程序也可。
------解决方案--------------------create table a(id varchar(10),data varchar(10),type varchar(10)) 
 insert into a values( '0001 ',    '26 ',       'AA1 ') 
 insert into a values( '0002 ',    '23 ',       'AA1 ') 
 insert into a values( '0003 ',    '56 ',       'AA1 ') 
 insert into a values( '0004 ',    '25 ',       'AA1 ') 
 create table b(id varchar(10),data varchar(10),type varchar(10)) 
 insert into b values( '0001 ',    '24 ',       'AA0 ') 
 insert into b values( '0002 ',    '26 ',       'AA0 ') 
 insert into b values( '0005 ',    '23 ',       'AA0 ') 
 insert into b values( '0001 ',    '26 ',       'AA2 ') 
 insert into b values( '0006 ',    '26 ',       'AA2 ') 
 go   
 declare @sql varchar(8000) 
 set @sql =  'select id ' 
 select @sql = @sql +  ' , min(case type when  ' ' ' + type +  ' ' ' then data end) [ ' + type +  '] ' 
 from (select distinct type from (select * from a union all select * from b) m) as t 
 set @sql = @sql +  ' from (select * from a union all select * from b) m group by id ' 
 exec(@sql)    
 drop table a,b 
 /* 
 id         AA0        AA1        AA2         
 ---------- ---------- ---------- ----------  
 0001       24         26