首頁 > 資料庫 > mysql教程 > 如何在不使用 CLR 聚合函數的情況下在 SQL Azure 中最佳地連接字串?

如何在不使用 CLR 聚合函數的情況下在 SQL Azure 中最佳地連接字串?

Mary-Kate Olsen
發布: 2025-01-20 09:16:10
原創
533 人瀏覽過

How Can I Optimally Concatenate Strings in SQL Azure Without CLR Aggregate Functions?

SQL Azure 字串高效連接方案

在SQL Azure中,有效率地將分散的字串資料聚合為單一實體至關重要。由於SQL Azure中缺乏CLR自訂聚合函數,因此需要尋找高效率的替代方案。

Transact SQL解決方案

一種高效的方法是使用WITH子句和遞歸CTE(公共表表達式)。此方法包括:

  1. 使用ROW_NUMBER()和PARTITION BY對分區內的行進行編號,定義連接順序。
  2. 使用遞歸CTE (Concatenated)迭代建立連接後的字串。
  3. 過濾結果,僅包含最終聚合結果(其中NameNumber = NameCount)。

說明

請考慮以下查詢:

<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>
登入後複製

範例

對於以下數據:

<code>ID      Name
------- --------
1       Matt
1       Rocks
2       Stylus
3       Foo
3       Bar
3       Baz</code>
登入後複製

傳回以下聚合結果:

<code>ID      FullName
------- ---------------------
1       Matt, Rocks
2       Stylus
3       Foo, Bar, Baz</code>
登入後複製

優點

  • 適用於SQL Azure
  • 效率相對較高,尤其對於較小的資料集
  • 易於根據特定連接場景進行自訂(例如:排序順序、分隔符號)

注意:為了避免nvarchar資料型別長度溢出,將CAST的型別修改為nvarchar(max)。 另外,範例結果中的排序與原文略有不同,這是因為ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) 的排序依據是Name字段,導致了排序結果的差異。 如果需要特定的排序方式,請修改ORDER BY子句。

以上是如何在不使用 CLR 聚合函數的情況下在 SQL Azure 中最佳地連接字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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