首頁 >資料庫 >mysql教程 >如何將多個 T-SQL 記錄中的欄位連接成逗號分隔的字串?

如何將多個 T-SQL 記錄中的欄位連接成逗號分隔的字串?

Barbara Streisand
Barbara Streisand原創
2025-01-15 08:21:43638瀏覽

How to Concatenate Fields from Multiple T-SQL Records into a Comma-Separated String?

在 T-SQL 中以另一個欄位對多個記錄的欄位分組

本文將探討一種技術,用於將兩個表中與多個記錄關聯的欄位值進行分組。透過組合來自 Reviews、Reviewers 和 Users 表的數據,我們可以將 FName 欄位連接成逗號分隔的字串。

<code class="language-sql">-- 示例数据
DECLARE @Reviews TABLE(
        ReviewID INT,
        ReviewDate DATETIME
)

DECLARE @Reviewers TABLE(
        ReviewerID   INT,
        ReviewID   INT,
        UserID INT
)

DECLARE @Users TABLE(
        UserID  INT,
        FName  VARCHAR(50),
        LName VARCHAR(50)
)

INSERT INTO @Reviews SELECT 1, '12 Jan 2009'
INSERT INTO @Reviews SELECT 2, '25 Jan 2009'

INSERT INTO @Users SELECT 1, 'Bob', ''
INSERT INTO @Users SELECT 2, 'Joe', ''
INSERT INTO @Users SELECT 3, 'Frank', ''
INSERT INTO @Users SELECT 4, 'Sue', ''
INSERT INTO @Users SELECT 5, 'Alice', ''

INSERT INTO @Reviewers SELECT 1, 1, 1
INSERT INTO @Reviewers SELECT 2, 1, 2
INSERT INTO @Reviewers SELECT 3, 1, 3
INSERT INTO @Reviewers SELECT 4, 2, 4
INSERT INTO @Reviewers SELECT 5, 2, 5</code>

使用巢狀 SELECT 和 FOR XML PATH() 的解

利用 FOR XML PATH() 運算符,我們可以將 FName 值連接到單一字串中:

<code class="language-sql">SELECT  *,
        ( 
            SELECT  u.FName + ','
            FROM    @Users u INNER JOIN 
                    @Reviewers rs ON u.UserID = rs.UserID
            WHERE   rs.ReviewID = r.ReviewID
            FOR XML PATH('')
        ) AS UserNames
FROM    @Reviews r</code>

此查詢傳回下列結果:

<code>ReviewID  ReviewDate  UserNames
1          12 Jan 2009  Bob,Joe,Frank
2          25 Jan 2009  Sue,Alice</code>

結論

利用 FOR XML PATH() 函數,我們成功地以公用欄位對不同表中多個記錄的欄位值進行了分組。此技術可應用於需要連接字串表示的場景。

以上是如何將多個 T-SQL 記錄中的欄位連接成逗號分隔的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn