给出一个表打横建成另外一张表
本帖最后由 chenfeng_cstp 于 2013-08-29 19:37:36 编辑
现:表1
aa bb cc
HR知识 2.0 自我评价
HR知识 2.0 上级评价
财务知识 2.0 自我评价
财务知识 1.0 上级评价
分析与诊断 2.0 自我评价
分析与诊断 2.0 上级评价
目标管理知 2.0 自我评价
需要实现结果:表2
cc HR知识 财务知识 分析与诊断 目标管理知
自我评价 2.0 2.0 2.0 2.0
上级评价 2.0 1.0 2.0
最好能够做成通用型语句,
打横最后能够随便制定一列,做表头
------解决方案--------------------
create table #tb(aa varchar(20),bb numeric(5,1),cc varchar(20))
insert into #tb
select 'HR知识',2.0,'自我评价'
union all select 'HR知识',2.0,'上级评价'
union all select '财务知识',2.0,'自我评价'
union all select '财务知识',1.0,'上级评价'
union all select '分析与诊断',2.0,'自我评价'
union all select '分析与诊断',2.0,'上级评价'
union all select '目标管理知',2.0,'自我评价'
declare @sql varchar(8000)
set @sql=''
select @sql=@sql + ',['+rtrim(aa)+']=max(case rtrim(aa) when '''+rtrim(aa)+''' then bb end)'
from #tb group by rtrim(aa)
exec('select cc'+@sql+' from #tb group by cc')
/*
cc HR知识 财务知识 分析与诊断 目标管理知
上级评价 2.0 1.0 2.0 NULL
自我评价 2.0 2.0 2.0 2.0
*/
------解决方案--------------------if OBJECT_ID('tempdb..#temp', 'u') is not null drop table #temp;