1

可能重复:
SQL Server:我可以用逗号将多行分隔为一列吗?
SQL Query 以逗号分隔符以及 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 列表。但是除了使用游标还有其他选择吗?

4

2 回答 2

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;

SQL 小提琴演示

您还可以创建一个表函数,该函数将返回您需要的所有值。

就像是

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;

SQL 小提琴演示

于 2012-10-02T03:40:26.837 回答
0

您可以创建一个执行此操作的 CLR 聚合函数。快速搜索谷歌发现:

http://www.mssqltips.com/sqlservertip/1691/sql-server-clr-function-to-concatenate-values-in-a-column/

似乎在 VB.Net 中,我敢肯定还有其他示例,尽管这些示例已经编写好了,因为这是一个非常常见的请求

于 2012-10-02T03:37:01.547 回答