说我有一张桌子
MemberMoto ( MemberID int, Moto nvarchar(100) )
我需要构建一个proc,它将返回每个用户的逗号分隔的Moto值列表。 我正在寻找一种方法来实现这一目标,而不是出于性能原因而使用CURSOR / FETCH
谢谢!
答案 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