员工姓名 项目类别 完成值 完成率
张三 项目A 50 61%
张三 项目B 60 70%
张三 项目C 70 80%
李四 项目A 55 67%
李四 项目B 45 78%
李四 项目C 76 80%
转为如下:
姓名 项目A完成值 完成率 项目B完成值 完成率 项目C完成值 完成率
张三 50 61% 60 70% 70 80%
李四 55 67% 45 78% 76 80%
张三 项目A 50 61%
张三 项目B 60 70%
张三 项目C 70 80%
李四 项目A 55 67%
李四 项目B 45 78%
李四 项目C 76 80%
转为如下:
姓名 项目A完成值 完成率 项目B完成值 完成率 项目C完成值 完成率
张三 50 61% 60 70% 70 80%
李四 55 67% 45 78% 76 80%
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([员工姓名] nvarchar(22),[项目类别] nvarchar(23),[完成值] nvarchar(23),[完成率] nvarchar(23))
Insert #T
select N'张三',N'项目A',50,N'61%' union all
select N'张三',N'项目B',60,N'70%' union all
select N'张三',N'项目C',70,N'80%' union all
select N'李四',N'项目A',55,N'67%' union all
select N'李四',N'项目B',45,N'78%' union all
select N'李四',N'项目C',76,N'80%'
Go
--测试数据结束
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select [员工姓名]'
SELECT @sql = @sql + ',max(case [项目类别] when ''' + [项目类别]
+ ''' then [完成值] else null end)[' + [项目类别] + '完成值]'+ ',max(case [项目类别] when ''' + [项目类别]
+ ''' then [完成率] else null end)[' + [项目类别] + '完成率]'
FROM ( SELECT DISTINCT
[项目类别]
FROM #T
) a
SET @sql = @sql
+ ' from #T group by [员工姓名]'
EXEC(@sql)