Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menggabungkan Rentetan dengan Cekap daripada Berbilang Baris dalam SQL Azure?

Bagaimanakah Saya Boleh Menggabungkan Rentetan dengan Cekap daripada Berbilang Baris dalam SQL Azure?

Patricia Arquette
Patricia Arquetteasal
2025-01-20 08:56:09316semak imbas

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

Mengoptimumkan Pengagregatan Rentetan dalam SQL Azure

Menggabungkan rentetan daripada berbilang baris ke dalam satu baris dengan cekap adalah tugas manipulasi data yang kerap. Walaupun beberapa kaedah pengagregatan terbukti tidak mencukupi, penyelesaian optimum wujud untuk mengatasi cabaran ini.

Pendekatan Terbaik untuk SQL Azure

Kekurangan fungsi agregat yang ditakrifkan CLR Azure memerlukan strategi alternatif. Pendekatan Transact-SQL berikut menyediakan penyelesaian yang cekap:

<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>

Penjelasan Terperinci:

Penyelesaian ini menggunakan proses tiga bahagian:

  1. Penomboran Baris: Berikan nombor unik pada setiap baris dalam setiap ID partition, disusun mengikut abjad dengan Name, menggunakan ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name).
  2. Penggabungan Rekursif: Ungkapan Jadual Sepunya (CTE) rekursif menambahkan nilai Name secara berulang berdasarkan nombor baris yang ditetapkan.
  3. Pilihan Akhir: Menapis hasil untuk mengekalkan hanya baris dengan NameNumber tertinggi dalam setiap partition, menghasilkan satu rentetan bercantum setiap ID.

Nota: Pertanyaan ini mengandaikan pengumpulan mengikut ID dan susunan abjad rentetan menaik. Penyesuaian mungkin diperlukan bergantung pada struktur dan keperluan data khusus anda. Pelakon nvarchar(max) memastikan panjang rentetan yang mencukupi untuk hasil gabungan yang besar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Rentetan dengan Cekap daripada Berbilang Baris dalam SQL Azure?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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