将字符串值从列连接到单个字符串的最佳方法是什么? (T-SQL)

时间:2010-07-27 14:50:12

标签: tsql

说我有一张桌子

MemberMoto ( MemberID int, Moto nvarchar(100) )

我需要构建一个proc,它将返回每个用户的逗号分隔的Moto值列表。 我正在寻找一种方法来实现这一目标,而不是出于性能原因而使用CURSOR / FETCH

谢谢!

3 个答案:

答案 0 :(得分:7)

我使用了以下内容并取得了巨大成功,这获得了单个用户的信息

DECLARE @results VARCHAR(MAX)
SELECT  @Results = COALESCE(@Results+ ', ' + Moto, Moto)
FROM    MemmberMoto
WHERE MemberId = 1
ORDER BY Moto

现在,如果你需要为每个用户或类似的东西调用一次,你可以将其外推到一个函数。

答案 1 :(得分:2)

create table MemberMoto (MemberID int, Moto nvarchar(100));

insert into MemberMoto values (1, 'joey');
insert into MemberMoto values (1, 'sally');
insert into MemberMoto values (2, 'yaochun');
insert into MemberMoto values (2, 'willy');

SELECT
   t1.MemberID,
   MotoList = substring((SELECT ( ', ' + Moto )
                           FROM MemberMoto t2
                           WHERE t1.MemberID = t2.MemberID
                           ORDER BY 
                              MemberID
                           FOR XML PATH( '' )
                          ), 3, 1000 )
FROM MemberMoto t1
GROUP BY MemberID

结果:

MemberID MotoList
1        joey, sally
2        yaochun, willy

答案 2 :(得分:0)

执行此操作的一种方法是创建自己的聚合函数。见http://technet.microsoft.com/en-us/library/ms131056.aspx