员工姓名 项目类别 完成值 完成率
张三 项目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%

解决方案 »

  1.   

    建议楼主提高结帖率
    --测试数据
    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)