首頁 > 資料庫 > mysql教程 > 如何在 SQL Azure 中高效率地連接多行字串?

如何在 SQL Azure 中高效率地連接多行字串?

Patricia Arquette
發布: 2025-01-20 08:56:09
原創
313 人瀏覽過

How Can I Efficiently Concatenate Strings from Multiple Rows in SQL Azure?

最佳化 SQL Azure 中的字串聚合

將多行中的字串有效地組合成一行是一項頻繁的資料操作任務。 雖然某些聚合方法被證明是不夠的,但存在克服這項挑戰的最佳解決方案。

SQL Azure 的最佳方法

SQL Azure 缺乏 CLR 定義的聚合函數,因此需要替代策略。 以下 Transact-SQL 方法提供了有效的解決方案:

<code class="language-sql">WITH Partitioned AS (
    SELECT 
        ID,
        Name,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber,
        COUNT(*) OVER (PARTITION BY ID) AS NameCount
    FROM dbo.SourceTable
),
Concatenated AS (
    SELECT 
        ID, 
        CAST(Name AS nvarchar(max)) AS FullName, 
        Name, 
        NameNumber, 
        NameCount 
    FROM Partitioned 
    WHERE NameNumber = 1
    UNION ALL
    SELECT 
        P.ID, 
        CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), 
        P.Name, 
        P.NameNumber, 
        P.NameCount
    FROM Partitioned AS P
        INNER JOIN Concatenated AS C 
                ON P.ID = C.ID 
                AND P.NameNumber = C.NameNumber + 1
)
SELECT 
    ID,
    FullName
FROM Concatenated
WHERE NameNumber = NameCount;</code>
登入後複製

詳細說明:

此解決方案採用三部分流程:

  1. 行編號: 為每個 ID 分區中的每一行分配一個唯一的編號,使用 Name.ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name)
  2. 字母順序排序。
  3. 遞歸串聯: 遞歸公用表表達式 (CTE) 根據分配的行號迭代附加 Name 值。
  4. 最終選擇: 過濾結果以僅保留每個分區中 NameNumber 最高的行,為每個 ID 產生一個串聯字串。

注意:此查詢假設按 ID 分組並按字串字母升序排列。根據您的特定資料結構和要求,可能需要進行調整。 nvarchar(max) 強制轉換可確保為大型串聯結果提供足夠的字串長度。

以上是如何在 SQL Azure 中高效率地連接多行字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板