--竖表变行表 --创建表 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

|