--生成测试数据
create table tb_Test(c_No varchar(20),c_Office varchar(10),c_Time varchar(10))
insert into tb_Test select '13509998888','翠星营业','2005-01'
insert into tb_Test select '13509998888','翠星营业','2005-01'
insert into tb_Test select '13509998888','翠星营业','2005-02'
insert into tb_Test select '13509998888','翠星营业','2005-03'
insert into tb_Test select '13509998888','东南营业','2005-03'
insert into tb_Test select '13509998888','东南营业','2005-03'
insert into tb_Test select '13509998888','东南营业','2005-04'
insert into tb_Test select '13509998888','东南营业','2005-04'
insert into tb_Test select '13509998888','东南营业','2005-04'
insert into tb_Test select '13509998888','东南营业','2005-04'
insert into tb_Test select '13509998888','东南营业','2005-04'--执行处理过程
select identity(int,1,1) as rowid,0 as rid,* into #T from tb_Test
update a set rid=(select count(*) from #t where c_No=a.c_No and c_Time=a.c_Time and rowid<=a.rowid) from #t adeclare @s varchar(8000)
set @s = ''select @s = @s+',c_Time_Office'+a.mon+'=max(case right(c_Time,2) when '''+a.mon+''' then c_Office end)'
from (select distinct mon=right(c_Time,2) from #T) a order by a.monset @s = 'select c_No'+@s+' from #T group by c_No,rid order by rid'exec(@s)
--删除测试数据
drop table tb_Test,#T--输出结果
/*
c_No            c_Time_Office1  c_Time_Office2  c_Time_Office3  c_Time_Office4
13509998888 翠星营业 翠星营业 翠星营业 东南营业
13509998888 翠星营业 NULL 东南营业 东南营业
13509998888 NULL NULL 东南营业 东南营业
13509998888 NULL NULL NULL 东南营业
13509998888 NULL NULL NULL 东南营业
*/

解决方案 »

  1.   

    declare @F varchar(8000),@T varchar(8000),@MT varchar(8000),@S varchar(8000)
    set @MT=' from tb_test '
    set @F='select tb_test.c_No'
    select @F=@F+',['+c_Time+'].c_Office as '''+c_Time+'''' from (select c_Time from tb_test group by c_Time) a
    set @T=''
    select @T=@T+'left join tb_test ['+c_Time+'] on tb_test.c_No=['+c_Time+'].c_No and ['+
    c_Time+'].c_Time='''+c_Time+'''' from (select c_Time from tb_test group by c_Time) a
    print @F
    print @T
    set @S=@F+@MT+@T
    exec(@S)
      

  2.   

    看看这样的行不?
    select  c_NO,
    c_time_office1 = sum(case c_time when '2005-01' then 1 else '' end  ),
    c_time_office2 = sum(case c_time when '2005-02' then 1 else '' end  ),
    c_time_office3 = sum(case c_time when '2005-03' then 1 else '' end  ),
    c_time_office4 = sum(case c_time when '2005-04' then 1 else '' end  )
    from tb_test
    group by c_no