首頁 >資料庫 >mysql教程 >如何在 T-SQL 中將多個審查者的名字連接成單一逗號分隔的字串?

如何在 T-SQL 中將多個審查者的名字連接成單一逗號分隔的字串?

Susan Sarandon
Susan Sarandon原創
2025-01-15 07:54:43401瀏覽

How to Concatenate Multiple Reviewers' First Names into a Single Comma-Separated String in T-SQL?

T-SQL中多個記錄欄位的組合

在T-SQL中,經常需要根據另一個欄位對多個記錄的欄位進行分組。考慮以下場景:

您有三個表:ReviewsReviewersUsersReviews表包含ReviewIDReviewDateReviewers表格包含ReviewerIDReviewIDUserID。最後,Users表格包含UserIDFNameLName

挑戰:

您希望顯示一個評論列表,每個列表都包含其相應的評論日期和與該評論關聯的所有審稿人的逗號分隔的姓名列表。期望的輸出如下圖所示:

<code>ReviewID---ReviewDate----Users
----------------------------
1----------12/1/2009-----Bob, Joe, Frank
2----------12/9/2009-----Sue, Alice</code>

而不是:

<code>ReviewID---ReviewDate---User
----------------------------
1----------12/1/2009----Bob
1----------12/1/2009----Joe
1----------12/1/2009----Frank
2----------12/9/2009----Sue
2----------12/9/2009----Alice</code>

解:

解決此問題的一種方法是使用FOR XML PATH('')方法:

<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 Users
FROM    @Reviews r</code>

以下是查詢的細分:

  • 第1行:Reviews表格中選取必要的欄位:ReviewIDReviewDate

  • 第4-9行: 使用子查詢來擷取每個註解的逗號分隔的姓名清單。

    • 子查詢根據UserID連接UsersReviewers表。
    • 它選擇FName列並在每個名稱後面連接一個逗號。
    • FOR XML PATH('')部分將結果聚合到單一字串中。
  • 第10行: 子查詢的結果被指定別名為Users

This revised output clarifies the alias and improves readability. The core functionality remains the same, efficiently concatenating reviewer first names into a comma-separated string.

以上是如何在 T-SQL 中將多個審查者的名字連接成單一逗號分隔的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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