可能重复:
SQL Server: Can I Comma Delimit Multiple Rows Into One Column?
SQL Query to get aggregated result in comma seperators along with group by column in SQL Server
我有一张类似的表:
DocumentID Name
1 Jack D'Souza
1 Rick Astley
1 Frankestein
1 Einstein
我想编写一个SQL Server标量函数,它将在参数中接受DocumentID并给出CSV分隔值。所以,如果我传入1
,它会给Jack D'Souza, Rick Astley, Frankestein, Einstein
在函数内部,我可以在游标中创建并创建此CSV列表。但是有没有替代使用游标?
答案 0 :(得分:3)
看一下这个例子
CREATE FUNCTION MyConcat(@ID INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @RetVal VARCHAR(MAX)
SELECT @RetVal = stuff(
(
select ',' + t1.Name
from MyTable t1
where t1.DocumentID = t.DocumentID
for xml path('')
),1,1,'')
FROM MyTable t
WHERE t.DocumentID = @ID
GROUP BY t.DocumentID
RETURN @RetVal
END;
您还可以创建一个表函数,它将返回您需要的所有值。
像
这样的东西CREATE FUNCTION MyConcatTable()
RETURNS @RetTable TABLE(
[DocumentID] int,
[Name] varchar(MAX)
)
AS
BEGIN
INSERT INTO @RetTable
SELECT t.DocumentID,
stuff(
(
select ',' + t1.Name
from MyTable t1
where t1.DocumentID = t.DocumentID
for xml path('')
),1,1,'')
FROM MyTable t
GROUP BY t.DocumentID
RETURN
END;
答案 1 :(得分:0)
你可以创建一个CLR聚合函数来执行此操作。快速搜索谷歌找到了这个:
似乎是在VB.Net中,我确定还有其他的例子已经写好了,因为这是一个非常常见的请求