首頁 >資料庫 >mysql教程 >如何在不使用 LISTAGG 的情況下在 SQL Server 中執行分組字串聚合?

如何在不使用 LISTAGG 的情況下在 SQL Server 中執行分組字串聚合?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-29 01:48:10811瀏覽

How to Perform Grouped String Aggregation in SQL Server Without LISTAGG?

SQL Server 中的分組字串聚合

使用SQL Server 時,常見任務是將多行中的字串值聚合為單一字串值, 以逗號分隔的字串。例如,給定一個包含汽車製造商和型號的表,您可能需要建立一個按汽車品牌對汽車型號進行分組的資料集。

SQL Server 的 LISTAGG 的替代方案

在 Oracle 中,此任務通常使用 LISTAGG 函數來完成。但是,SQL Server 沒有內建的 LISTAGG 等效項。相反,您可以結合 STUFF 和 FOR XML PATH 函數來獲得相同的結果。

以下查詢示範如何使用STUFF 和FOR XML PATH 在SQL Server 中實現分組字串聚合:

SELECT
  make.CarMakeID,
  make.CarMake,
  (
    SELECT
      STUFF(
        (
          SELECT
            ',' + model.CarModel
          FROM CarModels
          WHERE
            model.CarMakeID = make.CarMakeID
          FOR XML PATH('')
        ),
        1,
        1,
        ''
      ) AS CarModels
  )
FROM CarMakes AS make;

在此查詢中,子查詢使用FOR XML PATH 函數將汽車模型連接到單一XML 字串中,並以逗號分隔。然後,STUFF 函數刪除前導逗號並傳回連接的字串作為 CarModels 欄位。

以下是查詢的輸出:

| CarMakeID | CarMake | CarModels |
|----------|---------|-----------|
| 1         | SuperCars | Zoom, Wow, Awesome |
| 2         | MehCars | Mediocrity, YoureSettling |

此技術提供了一種簡單而有效的方法在SQL Server 中實現分組字串聚合,即使在字串連接複雜或包含特殊字符的情況下也是如此。

以上是如何在不使用 LISTAGG 的情況下在 SQL Server 中執行分組字串聚合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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