--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (员工姓名 varchar(4),部门 varchar(6))
insert into #T
select '张三','部门一' union all
select '李四','部门二' union all
select '王三','部门一' union all
select '张四','部门三' union all
select '罗三','部门二' union all
select '周四','部门三' union all
select '秦三','部门一' union all
select '周三','部门二' union all
select '高四','部门一'
go
select 员工姓名,
       case when 部门='部门一' then '是' else '' end [部门一],
       case when 部门='部门二' then '是' else '' end [部门二],
       case when 部门='部门三' then '是' else '' end [部门三]
from #T
go
drop table #T/*
员工姓名 部门一  部门二  部门三  
---- ---- ---- ---- 
张三   是         
李四        是    
王三   是         
张四             是
罗三        是    
周四             是
秦三   是         
周三        是    
高四   是         (所影响的行数为 9 行)
*/

解决方案 »

  1.   

    给个行列转换例子--建立测试环境
    Create Table 表(year varchar(10),name varchar(10),value varchar(10))
    --插入数据
    insert into 表
    select '2002','a','1' union
    select '2002','b','4' union
    select '2002','c','5' union
    select '2003','a','7' union
    select '2003','b','5' union
    select '2003','c','4' union
    select '2004','a','4'
    select * from 表
    --测试语句
    DECLARE @SQL VARCHAR(8000)
    SET @SQL='SELECT name'
    SELECT @SQL= @SQL+ 
    ',sum(CASE WHEN year = ''' + year + ''' THEN value else 0  END) [' + year + ']'
    FROM (SELECT DISTINCT year FROM 表) A
    SET @SQL=@SQL+' FROM 表 GROUP BY name'
    exec (@SQL)
     
     
    --删除测试环境
    Drop Table 表
    /*
    name   2002    2003    2004
    a 1 7 4
    b 4 5 0
    c 5 4 0*/
      

  2.   

    --> 测试数据: #T
    if object_id('tempdb.dbo.#T') is not null drop table #T
    create table #T (员工姓名 varchar(11),部门 varchar(11))
    insert into #T
    select '张三','部门一' union all
    select '李四','部门二' union all
    select '王三','部门一' union all
    select '张四','部门三' union all
    select '罗三','部门二' union all
    select '周四','部门三' union all
    select '秦三','部门一' union all
    select '周三','部门二' union all
    select '高四','部门一'select
    员工姓名,
    部门一=case 部门 when '部门一' then '是' else '否' end,
    部门二=case 部门 when '部门二' then '是' else '否' end,
    部门三=case 部门 when '部门三' then '是' else '否' end
    from #T/*
    员工姓名    部门一      部门二      部门三
    ----------- ----------- ----------- -----------
    张三        是          否          否
    李四        否          是          否
    王三        是          否          否
    张四        否          否          是
    罗三        否          是          否
    周四        否          否          是
    秦三        是          否          否
    周三        否          是          否
    高四        是          否          否
    */
      

  3.   

    --> 测试数据: #T
    if object_id('tempdb.dbo.#T') is not null drop table #T
    create table #T (员工姓名 varchar(4),部门 varchar(6))
    insert into #T
    select '张三','部门一' union all
    select '李四','部门二' union all
    select '王三','部门一' union all
    select '张四','部门三' union all
    select '罗三','部门二' union all
    select '周四','部门三' union all
    select '秦三','部门一' union all
    select '周三','部门二' union all
    select '高四','部门一'
    go
    declare @sql varchar(8000)
    set @sql='select 员工姓名'
    select @sql=@sql+',case when 部门='''+部门+''' then ''是'' else '''' end ['+部门+']'
    from #T group by 部门exec (@sql+' from #T')
    go
    drop table #T/*员工姓名 部门二  部门三  部门一  
    ---- ---- ---- ---- 
    张三             是
    李四   是         
    王三             是
    张四        是    
    罗三   是         
    周四        是    
    秦三             是
    周三   是         
    高四             是*/