--生成测试数据
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 东南营业
*/
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 东南营业
*/
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)
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