Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Menggabungkan Rentetan Secara Optimum dalam SQL Azure Tanpa Fungsi Agregat CLR?

Bagaimanakah Saya Boleh Menggabungkan Rentetan Secara Optimum dalam SQL Azure Tanpa Fungsi Agregat CLR?

Mary-Kate Olsen
Lepaskan: 2025-01-20 09:16:10
asal
533 orang telah melayarinya

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

Penyelesaian sambungan cekap rentetan SQL Azure

Dalam SQL Azure, mengagregat data rentetan berbeza ke dalam satu entiti dengan cekap adalah penting. Disebabkan kekurangan fungsi agregat tersuai CLR dalam SQL Azure, alternatif yang cekap perlu dicari.

Transact SQL Solution

Cara yang cekap ialah menggunakan WITH clause dan rekursif CTE (Common Table Expression). Kaedah ini termasuk:

  1. Gunakan ROW_NUMBER() dan PARTITION BY untuk menomborkan baris dalam partition dan tentukan susunan gabungan.
  2. Gunakan CTE rekursif (Bercantum) secara berulang untuk membina rentetan bercantum.
  3. Tapis keputusan untuk memasukkan hanya hasil agregat akhir (di mana NameNumber = NameCount).

Penerangan

Sila pertimbangkan pertanyaan berikut:

<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>
Salin selepas log masuk

Contoh

Untuk data berikut:

<code>ID      Name
------- --------
1       Matt
1       Rocks
2       Stylus
3       Foo
3       Bar
3       Baz</code>
Salin selepas log masuk

Mengembalikan hasil agregat berikut:

<code>ID      FullName
------- ---------------------
1       Matt, Rocks
2       Stylus
3       Foo, Bar, Baz</code>
Salin selepas log masuk

Kelebihan

  • Untuk SQL Azure
  • Agak cekap, terutamanya untuk set data yang lebih kecil
  • Mudah untuk disesuaikan untuk senario sambungan tertentu (cth. susunan isihan, pemisah)

Nota: Untuk mengelakkan limpahan panjang jenis data nvarchar, tukar jenis CAST kepada nvarchar(maks). Selain itu, pengisihan dalam hasil contoh adalah sedikit berbeza daripada teks asal Ini kerana asas pengisihan ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) ialah medan Nama, mengakibatkan perbezaan dalam hasil pengisihan. Jika anda memerlukan kaedah pengisihan khusus, ubah suai klausa ORDER BY.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Rentetan Secara Optimum dalam SQL Azure Tanpa Fungsi Agregat CLR?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan