导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

如何将表中某个字段的值作为一个String输出。(多个结果)

fishcr 2003-12-11 10:46:35
Table T_A: ColA ColB ColC
A 001 A1
A 001 A2
A 001 A3
A 002 B1
B 003 C1
B 003 C2
输出:
A 001 A1/A2/A3
A 002 B1
B 003 C1/C2
不用cursor.
...全文
19 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
--也可以用临时表

--测试:
create table T_A(ColA char(1),colB char(3),ColC char(2))
insert T_A select 'A','001','A1'
union all select 'A','001','A2'
union all select 'A','001','A3'
union all select 'A','002','B1'
union all select 'B','003','C1'
union all select 'B','003','C2'
go

select *,aa=cast('' as varchar(8000)) into #t from t_a order by cola,colb
declare @a char(1),@b char(3),@aa varchar(8000),@sp varchar(10)
set @sp='/' --定义分隔符
update #t set @aa=case when @a=cola and @b=colb then @aa+@sp+rtrim(colc) else rtrim(colc) end
,@a=cola,@b=colb,aa=@aa

select cola,colb,colc=max(aa) from #t group by cola,colb
go
--删除测试环境
drop table t_a,#t

/*结果
ColA ColB ColC
---- ---- ---------------
A 001 A1/A2/A3
A 002 B1
B 003 C1/C2

(所影响的行数为 3 行)

ColA ColB ColC
---- ---- ----------
A 001 A1,A2,A3
A 002 B1
B 003 C1,C2

(所影响的行数为 3 行)
*/
回复
--测试:
create table T_A(ColA char(1),colB char(3),ColC char(2))
insert T_A select 'A','001','A1'
union all select 'A','001','A2'
union all select 'A','001','A3'
union all select 'A','002','B1'
union all select 'B','003','C1'
union all select 'B','003','C2'

go
--创建一个合并的函数,可以自定义分隔符
create function f_merg(@a char(1),@b char(3),@spch varchar(10))
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+@spch+rtrim(colC) from T_A where colA= @a and ColB=@b
set @re=substring(@re,len(@spch)+1,8000)
return(@re)
End
go

--调用自定义函数得到结果,以/分隔
select ColA,ColB,ColC=dbo.f_merg(ColA,ColB,'/')
from T_A group by ColA,ColB

--调用自定义函数得到结果,以,分隔
select ColA,ColB,ColC=dbo.f_merg(ColA,ColB,',')
from T_A group by ColA,ColB

go
--删除测试环境
drop table t_a
drop function f_merg

/*结果
ColA ColB ColC
---- ---- ---------------
A 001 A1/A2/A3
A 002 B1
B 003 C1/C2

(所影响的行数为 3 行)

ColA ColB ColC
---- ---- ----------
A 001 A1,A2,A3
A 002 B1
B 003 C1,C2

(所影响的行数为 3 行)
*/
回复
--创建一个合并的函数,可以自定义分隔符
create function f_merg(@a char(1),@b char(3),@spch varchar(10))
returns varchar(8000)
as
begin
declare @re varchar(8000)
set @re=''
select @re=@re+@spch+rtrim(colC) from T_A where colA= @a and ColB=@b
set @re=substring(@re,len(@spch)+1,8000)
return(@re)
End
go
回复
fishcr 2003-12-11
先谢谢各位。

如果分隔符用‘,’或者别的,能否不用自定义函数,只是通过Sql自带的函数用一句查询来写呢?
我早期在这里看到过,收藏过,但是现在弄不见了。
回复
azsoft 2003-12-11
楼上改
set @分隔符=N'/'
回复
CrazyFor 2003-12-11
1,建自定义函数
Create function getstr(@id Nchar(100))
returns Nvarchar(4000)
as
begin
declare @str Nvarchar(4000),@分隔符 Nvarchar(10)
set @分隔符=N','
set @str=N''
select @str=@str+rtrim(Col)+@分隔符 from 表名
--------------------------------^^^^要相加的字段名
where 相加条件字段=@id
set @str=left(@str,len(@str)-1)落 ---却除最后一个分隔符
return @str
end
GO

2,调用
select 条件字段,dbo.getstr(条件字段) from 表名 group by 条件字段
回复
lynx1111 2003-12-11
create function f_merg(@content VARCHAR(200),@CONTENT2 VARCHAR(200))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+rtrim(COLC) from T_A where COLA=@content AND COLB=@CONTENT2
select @str=right(@str,len(@str)-1)
return @str
end
go

select COLA,COLB,COLC=dbo.f_merg(COLA,COLB) from T_A group by COLA,COLB
回复
txlicenhe 2003-12-11
--测试:
create table T_A(ColA char(1),colB char(3),ColC char(2))
insert T_A select 'A','001','A1'
union all select 'A','001','A2'
union all select 'A','001','A3'
union all select 'A','002','B1'
union all select 'B','003','C1'
union all select 'B','003','C2'


--1.创建一个合并的函数
create function fmerg(@a char(1),@b char(3))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+'/'+colC from T_A where colA = @a and ColB = @b
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct ColA,ColB,dbo.fmerg(ColA,ColB) from T_A
/*结果
ColA ColB
---- ---- -------------
A 001 A1/A2/A3
A 002 B1
B 003 C1/C2

(所影响的行数为 3 行)

*/
回复
txlicenhe 2003-12-11
http://expert.csdn.net/Expert/topic/2440/2440306.xml?temp=.6941645
[交流]行列转换
回复
txlicenhe 2003-12-11

--1.创建一个合并的函数
create function fmerg(@a char(1),@b char(3))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+'/'+colC from T_A where colA = @a and ColB = @b
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct ColA,ColB,dbo.fmerg(ColA,ColB) from T_A

回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告