一个涉及SQL转置查询的有关问题,有点难

一个涉及SQL转置查询的问题,有点难?
有三个表:
1、员工基本资料表
一个涉及SQL转置查询的有关问题,有点难
2、员工保险资料表
一个涉及SQL转置查询的有关问题,有点难
3、保险基本资料表
一个涉及SQL转置查询的有关问题,有点难
想得到如下结果:
一个涉及SQL转置查询的有关问题,有点难

能否用一个语句或用view来实现,请高手不吝赐教,谢谢!




------解决方案--------------------
select
   a.工号,a.姓名,
   max(case when c.保险内码=1 then b.个人负担比率 else '' end) as 养老保险个人负担比率,
   max(case when c.保险内码=1 then b.个人负担金额 else '' end) as 养老保险个人负担金额,
   max(case when c.保险内码=2 then b.个人负担比率 else '' end) as 医疗保险个人负担比率,
   max(case when c.保险内码=2 then b.个人负担金额 else '' end) as 医疗保险个人负担金额,
   max(case when c.保险内码=3 then b.个人负担比率 else '' end) as 失业保险个人负担比率,
   max(case when c.保险内码=3 then b.个人负担金额 else '' end) as 失业保险个人负担金额
from
   员工基本资料表 a,
   员工保险资料表 b,
   保险基本资料表 c
where
   a.员工内码=b.员工内码
and
   b.保险内码=c.保险内码

------解决方案--------------------

create table 员工基本资料表
(员工内码 int,工号 varchar(10),姓名 varchar(10))

create table 员工保险资料表
(内码 int,员工内码 int,保险内码 int,个人负担比率 varchar(5),个人负担金额 varchar(5))

create table 保险基本资料表
(保险内码 int,代号 varchar(10),名称 varchar(10))

insert into 员工基本资料表
 select 1,'130001','张三' union all
 select 1,'130002','李四' union all
 select 1,'130003','王五' union all
 select 1,'130004','赵六'

insert into 员工保险资料表
 select 1,1,1,'2%','20' union all
 select 2,1,2,'3%','30' union all
 select 3,1,3,'5%','50' union all
 select 4,2,1,'2%','20' union all
 select 5,2,2,'3%','30' union all
 select 6,3,1,'2%','20' union all
 select 7,4,1,'2%','20' union all
 select 8,4,2,'3%','30' union all
 select 9,4,3,'5%','50'

insert into 保险基本资料表
 select 1,'001','养老保险' union all
 select 2,'002','医疗保险' union all
 select 3,'003','失业保险'
 

declare @tsql varchar(6000)

select @tsql=isnull(@tsql+',','')
            +'max(case when c.名称='''+名称+''' then a.个人负担比率 else '''' end) '''+名称+'个人负担比率'', '
            +'max(case when c.名称='''+名称+''' then a.个人负担金额 else '''' end) '''+名称+'个人负担金额'' '
  from 保险基本资料表

select @tsql='select b.工号,b.姓名,'+@tsql
            +' from 员工保险资料表 a '
            +' inner join 员工基本资料表 b on a.员工内码=b.员工内码 '
            +' inner join 保险基本资料表 c on a.保险内码=c.保险内码 '
            +' group by b.员工内码,b.工号,b.姓名 '
            +' order by b.员工内码 '

exec(@tsql)
 
/*
工号         姓名        养老保险个人负担比率 养老保险个人负担金额 医疗保险个人负担比率 医疗保险个人负担金额 失业保险个人负担比率 失业保险个人负担金额
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
130001     张三         2%         20         3%         30         5%         50
130002     李四         2%         20         3%         30         5%         50
130003     王五         2%         20         3%         30         5%         50