日期:2014-05-18 浏览次数:20725 次
create table test(单号 varchar(100),日期 varchar(100)) insert into test select'00001','2007/11/1' union select'00001','2007/11/2' union select'00001','2007/11/5' union select'00002','2007/11/2' union select'00002','2007/11/3' go create function getDates(@id varchar(100)) returns varchar(1000) as begin declare @ret varchar(1000) set @ret='' select @ret=@ret+日期+',' from test where 单号=@id if(len(@ret)>1) set @ret=left(@ret,len(@ret)-1) return @ret end go select 单号,dbo.getDates(单号) from test group by 单号 drop table test drop function dbo.getDates /* 00001 2007/11/1,2007/11/2,2007/11/5 00002 2007/11/2,2007/11/3 */
------解决方案--------------------
原始数据如下: /*单号 日期 00001 2007/11/1 00001 2007/11/2 00001 2007/11/5 00002 2007/11/2 00002 2007/11/3 要得到如下结果: 单号 日期 00001 2007/11/1,2007/11/2,2007/11/5 00002 2007/11/2,2007/11/3*/ create table tb(单号 varchar(8), 日期 varchar(20)) insert tb select '00001', '2007/11/1' union all select '00001', '2007/11/2' union all select '00001', '2007/11/5' union all select '00002', '2007/11/2' union all select '00002', '2007/11/3' go create function fn_Test(@ID varchar(8)) returns varchar(8000) as begin declare @result varchar(8000) set @result='' select @result=@result+','+日期 from tb where 单号=@ID return stuff(@result,1,1,'') end go select 单号,dbo.fn_Test(单号) from tb group by 单号 drop function dbo.fn_Test drop table tb /* 单号 -------- ------------------------ 00001 2007/11/1,2007/11/2,2007/11/5 00002 2007/11/2,2007/11/3 (2 row(s) affected) */
------解决方案--------------------
create function dbo.Test(@billno varchar(10)) returns varchar(100) AS BEGIN declare @result varchar(100) set @result='' select @result=@result+[日期]+',' from tableName if @result<>'' set @result=left(@result,len(@result)-1) return @result END --使用下面的查詢可獲得結果 select [單號],dbo.Test([單號]) From TableName group by [單號]