列值如何进行合并?
select * into #t1
from (
select 1 f1, 'a' f2
union
select 1 f1, 'b' f2
union
select 2 f1, 'c' f2
union
select 3 f1, 'd' f2) a
select * from #t1
/*
我想得到,相同f1的f2进行合并,结果如下,如何写这样的SQL?谢谢
结果应该如下:
f1 f2
------------------
1 a,b
2 c
3 d
*/
问题点数:0、回复次数:6Top
1 楼WangZWang(先来)回复于 2005-06-01 22:58:17 得分 0
--创建一个合并处理函数
create function f_str(
@f1 varchar(4)
)returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+','+cast(f2 as varchar)
from t1
where f1=@f1
return(stuff(@re,1,1,''))
end
go
--调用函数实现查询
select distinct f1,f2=dbo.f_str(f1)
from t1
goTop
2 楼filebat(Mark)回复于 2005-06-01 23:12:15 得分 0
参见:
http://community.csdn.net/Expert/topic/4052/4052457.xml?temp=5.399722E-02Top
3 楼zhangzs8896(小二)回复于 2005-06-02 09:27:47 得分 0
select * into #t1
from (
select 1 f1, 'a' f2
union
select 1 f1, 'b' f2
union
select 2 f1, 'c' f2
union
select 3 f1, 'd' f2) a
/*查询
先创建一个表#t2,注意f2字段设置大些。将#t1数据插入到#t2
对#t2中的数据进行更新,
*/
create table #t2(f1 int,f2 varchar(8000))
insert #t2
select * from #t1
declare @s varchar(100)
declare @i varchar(10)
set @s=''
set @i=0
update #t2
set @s=case when @i=f1 then @s+','+f2 else f2 end,
@i=f1,f1=@i,f2=@s
select f1,f2=max(f2) from #t2
group by f1
--删除表
drop table #t1,#t2Top
4 楼zhangzs8896(小二)回复于 2005-06-02 09:29:19 得分 0
--结果
f1 f2
------------------
1 a,b
2 c
3 d
--最近问这种问题的特别多,楼主可以搜索下,挺多的Top
5 楼zjcxc(邹建)回复于 2005-06-02 09:30:36 得分 0
select * into #t1
from (
select 1 f1, 'a' f2
union
select 1 f1, 'b' f2
union
select 2 f1, 'c' f2
union
select 3 f1, 'd' f2) a
select f1,f2=min(f2)+case when count(*)=1 then '' else ','+max(f2) end
from #t1
group by f1
drop table #t1
/*--结果
f1 f2
----------- ----
1 a,b
2 c
3 d
(所影响的行数为 3 行)
--*/
Top
6 楼zhangzs8896(小二)回复于 2005-06-02 09:45:01 得分 0
恩?老大这么一写,到提醒了我。
楼主的意思是结果的f2列,是要这样的"最小值,最大值"的形式?
还是"值1,值2,值3..."这样的形式?
楼主可以加个
union
select 1 f1, 'M' f2
再试试
Top




