如何將多個字段的值串成一個字符串形成另外一表的字段值?

JB-Zhang 2012-08-21 11:51:47
有TabelA:

TeamCode Account
-----------------------
AA User1
AB User1
AC User1
AB User2
BC User2

我想以Account分組,將TeamCode字段值的內容串成字符串,形成如下Table2:

Account TeamCode
------------------------
User1 AA,AB,AC
User2 AB,BC

我能想到的是游標,請問還有其它更好的辦法嗎?
...全文
96 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevinjay567 2012-08-21
  • 打赏
  • 举报
回复
xml path
JB-Zhang 2012-08-21
  • 打赏
  • 举报
回复
不是呀,AA,AB,AC是一個字段的值(AA,AB與AC拼接成字符串),並不是三個字段呀.
Felixzhaowenzhong 2012-08-21
  • 打赏
  • 举报
回复
--最通用的方式
declare @tb table (id int, value varchar(10))
insert into @tb values(1, 'aa')
insert into @tb values(1, 'bb')
insert into @tb values(2, 'aaa')
insert into @tb values(2, 'bbb')
insert into @tb values(2, 'ccc')

select id , [value]=
stuff((select ','+[value] from @tb t where id =tv.id for xml path('')), 1, 1, '')
from @tb as tv
group by id
/*
id ccname
1 aa,bb
2 aaa,bbb,ccc
*/
Felixzhaowenzhong 2012-08-21
  • 打赏
  • 举报
回复
--最通用的方式
declare @tb table (id int, value varchar(10))
insert into @tb values(1, 'aa')
insert into @tb values(1, 'bb')
insert into @tb values(2, 'aaa')
insert into @tb values(2, 'bbb')
insert into @tb values(2, 'ccc')

select id , [value]=
stuff((select ','+[value] from @tb t where id =tv.id for xml path('')), 1, 1, '')
from @tb as tv
group by id
/*
id ccname
1 aa,bb
2 aaa,bbb,ccc
*/
Felixzhaowenzhong 2012-08-21
  • 打赏
  • 举报
回复
IF EXISTS ( SELECT  * FROM sysobjects WHERE id = OBJECT_ID('[two]') AND OBJECTPROPERTY(id, 'IsUserTable') = 1 ) 
DROP TABLE two
CREATE TABLE two
(id INT IDENTITY(1, 1)NOT NULL ,
UserName VARCHAR(50) ,
Code VARCHAR(50) NULL
)

SET IDENTITY_INSERT two ON
INSERT two( id, UserName, code )VALUES ( 1, 'User1', 'A' )
INSERT two( id, UserName, code )VALUES ( 1, 'User1', 'B' )
INSERT two( id, UserName, code )VALUES ( 1, 'User2', 'C' )
INSERT two( id, UserName, code )VALUES ( 1, 'User2', 'D' )
INSERT two( id, UserName, code )VALUES ( 1, 'User2', 'E' )
INSERT two( id, UserName, code )VALUES ( 1, 'User3', 'F' )
INSERT two( id, UserName, code )VALUES ( 1, 'User3', 'G' )
INSERT two( id, UserName, code )VALUES ( 1, 'User3', 'H' )
INSERT two( id, UserName, code )VALUES ( 1, 'User3', 'I' )
SET IDENTITY_INSERT two OFF

--按某一列出结果的
SELECT B.username ,LEFT(UserList, LEN(UserList) - 1) AS list
FROM ( SELECT username ,
( SELECT code + ',' FROM two WHERE username = A.username ORDER BY ID FOR XML PATH('')
) AS UserList
FROM two A GROUP BY username
) B

/*
username list
User1 A,B
User2 C,D,E

User3 F,G,H,I*/
發糞塗牆 2012-08-21
  • 打赏
  • 举报
回复
你在FAQ贴中找“行转列”,就可以了,这个是典型的问题,不用游标的。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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