1

重複の可能性:
SQL Server: 複数の行をカンマ区切りで 1 つの列にすることはできますか?
SQL Serverの列ごとのグループとともにコンマ区切りで集計結果を取得するSQLクエリ

次のようなテーブルがあります。

DocumentID      Name
1           Jack D'Souza
1           Rick Astley
1           Frankestein
1           Einstein

DocumentID としてパラメーターを受け入れ、CSV で区切られた値を与える SQL Server スカラー関数を作成したいと考えています。だから、私が渡すと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集計関数を作成できます..Googleのクイック検索でこれが見つかりました:

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

VB.Netにあるようですが、これはかなり一般的な要求であるため、すでに書かれている他の例があると確信しています

于 2012-10-02T03:37:01.547 に答える