有没有办法select所有行内容合并为一个字符串?

javaxi 2010-02-04 01:56:38
有没有办法select所有行内容合并为一个字符串?

表t
id name
----------------
1 aaa
2 bbb
3 cc
4 d

需要的结果:
id name
----------------
1,2,3,4 aaa,bbb,cc,d
...全文
293 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lrjt1980 2010-02-04
  • 打赏
  • 举报
回复
INSERT INTO 新表 idname select id,name from 旧表
忆轩辕 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 alfred_2006 的回复:]
不过要是数据量很大,通过sql还是不太好,个人感觉,关键还是看问题的背景和应用的场景,要是没有效率问题,到没什么问题

引用 6 楼 colacat911 的回复:
引用 4 楼 alfred_2006 的回复:
不好意思,我不是太了解问题的背景,如果不是非SQL不行的情况下,是否可以读取后,再程序中拼串,这样效率是否更好一些


你要保证有足够内存放下这些数据

[/Quote]

程序处理可是要跑循环的,数据库扫一次表就完成了,哪个效率一目了然吧
kasin000 2010-02-04
  • 打赏
  • 举报
回复

Create table tb([id] int,[name] nvarchar(3))
Insert tb
select 1,N'aaa' union all
select 2,N'bbb' union all
select 3,N'cc' union all
select 4,N'd'
Go

select top 1

id=SUBSTRING((select ','+cast(id as varchar) from tb for xml path('')),2,100000),
name=SUBSTRING((select ','+name from tb for xml path('')),2,100000)

from tb
alfred_2006 2010-02-04
  • 打赏
  • 举报
回复
不过要是数据量很大,通过sql还是不太好,个人感觉,关键还是看问题的背景和应用的场景,要是没有效率问题,到没什么问题

[Quote=引用 6 楼 colacat911 的回复:]
引用 4 楼 alfred_2006 的回复:
不好意思,我不是太了解问题的背景,如果不是非SQL不行的情况下,是否可以读取后,再程序中拼串,这样效率是否更好一些


你要保证有足够内存放下这些数据
[/Quote]
cailee 2010-02-04
  • 打赏
  • 举报
回复
declare @t table(id int,name varchar(3))
insert @t select 1,'aaa'
insert @t select 2,'bbb'
insert @t select 3,'cc'
insert @t select 4,'d'

declare @id varchar(20),@name varchar(20)
select @id='',@name=''

select @id=@id+','+cast(id as varchar(10)),@name=@name+','+name
from @t

select right(@id,len(@id)-1) as id,right(@name,len(@name)-1) as name
/*
id name
-------------------- --------------------
1,2,3,4 aaa,bbb,cc,d
*/
幸运的意外 2010-02-04
  • 打赏
  • 举报
回复
在数据量比较少的情况下:
可以用生成一个字符串的方法为:
declare @s varchar(1000)
select @s=isnull(@s+',','')+ltrim(ID)from tb
select @s=isnull(@s+',','')+ltrim([Name])from tb
select @s

如果字符数据太长,那就不行了.
忆轩辕 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 alfred_2006 的回复:]
不好意思,我不是太了解问题的背景,如果不是非SQL不行的情况下,是否可以读取后,再程序中拼串,这样效率是否更好一些
[/Quote]

你要保证有足够内存放下这些数据
alfred_2006 2010-02-04
  • 打赏
  • 举报
回复
不好意思,我不是太了解问题的背景,如果不是非SQL不行的情况下,是否可以读取后,再程序中拼串,这样效率是否更好一些
vipper23 2010-02-04
  • 打赏
  • 举报
回复

declare @s varchar(1000) declare @s1 varchar(1000)
select @s=isnull(@s+',','')+ltrim(ID)from tb
select @s1=isnull(@s1+',','')+ltrim([name])from tb
select @s,@s1

id name
------------------------ ---------------------------
1,2,3,4,5 a,b,c,d,e

(1 行受影响)

快乐_石头 2010-02-04
  • 打赏
  • 举报
回复
--> Title  : Generating test data 
--> Author : wufeng4552
--> Date : 2010-02-04 13:57:59

if not object_id('tb') is null
drop table tb
Go
Create table tb([id] int,[name] nvarchar(3))
Insert tb
select 1,N'aaa' union all
select 2,N'bbb' union all
select 3,N'cc' union all
select 4,N'd'
Go
declare @s varchar(1000)
select @s=isnull(@s+',','')+ltrim(ID)from tb
select @s=isnull(@s+',','')+ltrim([Name])from tb
select @s
/*
1,2,3,4,aaa,bbb,cc,d

(1 個資料列受到影響)
*/
--小F-- 2010-02-04
  • 打赏
  • 举报
回复
----------------------------------------------------
/*如何将一列中所有的值一行显示
数据源
a
b
c
d
e
结果
a,b,c,d,e
*/

create table tb(col varchar(20))
insert tb values ('a')
insert tb values ('b')
insert tb values ('c')
insert tb values ('d')
insert tb values ('e')
go

--方法一
declare @sql varchar(1000)
set @sql = ''
select @sql = @sql + t.col + ',' from (select col from tb) as t
set @sql='select result = ''' + left(@sql , len(@sql) - 1) + ''''
exec(@sql)
/*
result
----------
a,b,c,d,e,
*/

--方法二
declare @output varchar(8000)
select @output = coalesce(@output + ',' , '') + col from tb
print @output
/*
a,b,c,d,e
*/

drop table tb

-------------

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧