create table tt(name varchar(100), no int,n_date datetime)
go
insert into tt(name,no,n_date)
select 'ABC',111,'2005-12-1' union all
select 'DEF',111,'2005-6-6' union all
select 'GDD',333,'2005-8-8' union all
select 'FGH',444,'2005-8-9'select * from ttgo
--创建自定义函数
create function fn_getN_date (@no int)
returns varchar(1000)
as
begin
declare @s varchar(1000)
set @s=''
select @s=@s + ',' + convert(varchar(10),n_date,120)
from tt
where no=@no
set @s=stuff(@s,1,1,'')return @s
end
go--创建自定义函数
create function fn_getName (@no int)
returns varchar(1000)
as
begin
declare @s varchar(1000)
set @s=''
select @s=@s + ',' + name
from tt
where no=@no
set @s=stuff(@s,1,1,'')return @s
end
goselect dbo.fn_getName(no) as Name,no,dbo.fn_getN_Date(no) as N_Date
from tt
group by no
drop table tt
drop function fn_getN_date
drop function fn_getName

解决方案 »

  1.   

    可惜SQLServer没有connect by,start with等用法
      

  2.   

    create table tst(name varchar(100), no int,n_date datetime)
    go
    insert into tst(name,no,n_date)
    select 'ABC',111,'2005-12-1' union all
    select 'DEF',111,'2005-6-6' union all
    select 'GDD',333,'2005-8-8' union all
    select 'FGH',444,'2005-8-9'
    declare  @temp_tst table(name varchar(100),No int, n_date varchar(100))
    declare mycur cursor for select * from tst 
    declare @name varchar(100)
    declare @no   int
    declare @date  datetime 
     declare @temp_no   int 
     set @temp_no=0 
     declare @tmp varchar(100)
      set @tmp='' 
     declare  @temp_date varchar(100)
     
    open mycur      
    fetch next from mycur into @name ,@no,@date
    while(@@fetch_status=0)
    begin 
       
         if(@temp_no=@no)
            begin 
             
               set @tmp=@tmp+','+@name
               set @temp_date=@temp_date+','+convert(varchar(100),@date,111) 
     
              insert into @temp_tst values (@tmp,@no,@temp_date)
            end
         set @tmp=@name 
         set @temp_no=@no
         set @temp_date=convert(varchar(100),@date,111)  
       fetch  next from mycur into @name,@no,@date
     end
    close mycur
    deallocate mycur 
    select * from @temp_tst