--竖表变行表

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

--竖表变行表

--创建表

create table A(

工号 varchar(20),

日期 smalldatetime,

时间 varchar(20)

)

--插入测试数据

insert into A select '01', '2004-10-01', '07:50'

union select '01', '2004-10-01', '11:35'

union select '01', '2004-10-01', '14:20'

union select '01', '2004-10-02', '08:01'

union select '01', '2004-10-02', '14:30'

union select '02', '2004-10-01', '07:55'

union select '02', '2004-10-02', '07:58'

union select '03', '2004-10-01', '07:56'

--创建存储过程

create proc p_t

as

declare @id varchar(20),@date smalldatetime,@time varchar(50)

select * into #a from A order by 工号,日期,时间

update #a set 时间=case when (工号=@id) and (日期=@date) then @time else 时间 end,

@time=case when (工号=@id) and (日期=@date) then @time+','+时间 else 时间 end,

@id=工号,@date=日期

select 工号,日期,max(时间) as 时间 from #a group by 工号,日期 order by 工号

--执行

exec p_t

--测试结果

工号 日期 时间

---------------------------------------------

01 2004-10-01 00:00:00 07:50,11:35,14:20

01 2004-10-02 00:00:00 08:01,14:30

02 2004-10-01 00:00:00 07:55

02 2004-10-02 00:00:00 07:58

03 2004-10-01 00:00:00 07:56

(所影响的行数为 5 行)

select [Empid] from [Employee]

得出结果:

张三

李四

王五

...

...

想要将它合并成这种结果:

张三,李四,王五...,...

declare @s varchar(8000)

set @s=''

select @s=@s+','+[Empid] from [Employee]

print stuff(@s,1,1,'')

declare @sql varchar(2000)

set @sql=''

select @sql=@sql+[Empid]+',' from [Employee]

set @sql=left(@sql,len(@sql)-1)

print @sql

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航