--测试数据
create table 表(id int,name1 int,name2 int)
insert 表 select 1,1,1
union all select 2,1,2
union all select 3,1,3
union all select 4,1,4
union all select 5,2,8
union all select 6,3,9
union all select 7,3,10
union all select 8,3,11
union all select 9,4,12
go
--直接生成结果的方法
select a.name1,name2=cast(a.name2 as varchar)
+case when b.name2 is null then ''
else ','+cast(b.name2 as varchar) end
+case when c.name2 is null then ''
else ','+cast(c.name2 as varchar) end
+case when d.name2 is null then '' else '...' end
from(
select name1,name2 from 表 a
where (
select sum(1) from 表
where name1=a.name1 and id<=a.id
)=1
)a left join(
select name1,name2 from 表 a
where (
select sum(1) from 表
where name1=a.name1 and id<=a.id
)=2
)b on a.name1=b.name1 left join(
select name1,name2 from 表 a
where (
select sum(1) from 表
where name1=a.name1 and id<=a.id
)=3
)c on a.name1=c.name1 left join(
select name1,name2 from 表 a
where (
select sum(1) from 表
where name1=a.name1 and id<=a.id
)=4
)d on a.name1=d.name1
--直接生成结果的方法
select a.name1,name2=cast(a.name2 as varchar)
+case when b.name2 is null then ''
else ','+cast(b.name2 as varchar) end
+case when c.name2 is null then ''
else ','+cast(c.name2 as varchar) end
+case when d.name2 is null then '' else '...' end
from(
select name1,name2 from 表 a
where (
select sum(1) from 表
where name1=a.name1 and id<=a.id
)=1
)a left join(
select name1,name2 from 表 a
where (
select sum(1) from 表
where name1=a.name1 and id<=a.id
)=2
)b on a.name1=b.name1 left join(
select name1,name2 from 表 a
where (
select sum(1) from 表
where name1=a.name1 and id<=a.id
)=3
)c on a.name1=c.name1 left join(
select name1,name2 from 表 a
where (
select sum(1) from 表
where name1=a.name1 and id<=a.id
)=4
)d on a.name1=d.name1
--用临时表的处理方法
select name1,name2,sid=(
select sum(1) from 表 where name1=a.name1 and id<=a.id)
into #t from 表 a
where (select sum(1) from 表 where name1=a.name1 and id<=a.id)<=4
select a.name1,name2=cast(a.name2 as varchar)
+case when b.name2 is null then ''
else ','+cast(b.name2 as varchar) end
+case when c.name2 is null then ''
else ','+cast(c.name2 as varchar) end
+case when d.name2 is null then '' else '...' end
from(
select name1,name2 from #t where sid=1
)a left join(
select name1,name2 from #t where sid=2
)b on a.name1=b.name1 left join(
select name1,name2 from #t where sid=3
)c on a.name1=c.name1 left join(
select name1,name2 from #t where sid=4
)d on a.name1=d.name1
SELECT DISTINCT NAME1,NAME2,CAST('' AS VARCHAR(2000)) NEW_NAME INTO # FROM TABLE1
DECLARE @NAME varchar(10),@n varchar(2000)
set @n=''
update # set @n=case when name1<>@NAME then name2+',' else @n+name2+',' end,@NAME=name1,NEW_NAME=@n
select name1,max(NEW_NAME) from # group by name1
drop table table1,#
name1
1 1,2,3,4,
2 8,
3 10,11,9,
4 12,
CREATE FUNCTION dbo.f_string(@name1 varchar(10))
RETURNS varchar(2000)---返回值
as
begin
declare @ varchar(2000)
set @=''
select @=@+name2+',' from table1 where name1=@name1
set @=left(@,len(@)-1)
RETURN(@)
end
select name1, dbo.f_string(name1) from (select distinct name1 from table1) a
name1
---------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 1,2,3,4
2 8
3 9,10,11
4 12