日期:2014-05-18  浏览次数:20725 次

高手都来看下,这样的要求,SQL语句能实现吗?
原始数据如下:
单号 日期
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

------解决方案--------------------
SQL code
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
*/

------解决方案--------------------
SQL code
原始数据如下: 
/*单号               日期 
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)
*/

------解决方案--------------------
SQL code

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 [單號]