Heim >Datenbank >MySQL-Tutorial >Wie kann ich Zeichenfolgen aus mehreren Zeilen in SQL Azure effizient verketten?

Wie kann ich Zeichenfolgen aus mehreren Zeilen in SQL Azure effizient verketten?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-20 08:56:09316Durchsuche

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

Optimierung der String-Aggregation in SQL Azure

Das effiziente Kombinieren von Zeichenfolgen aus mehreren Zeilen in einer einzigen Zeile ist eine häufige Aufgabe der Datenmanipulation. Während sich einige Aggregationsmethoden als unzureichend erweisen, gibt es optimale Lösungen, um diese Herausforderung zu meistern.

Der beste Ansatz für SQL Azure

Der Mangel an CLR-definierten Aggregatfunktionen in SQL Azure erfordert alternative Strategien. Der folgende Transact-SQL-Ansatz bietet eine effiziente Lösung:

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

Detaillierte Erklärung:

Diese Lösung verwendet einen dreiteiligen Prozess:

  1. Zeilennummerierung: Weist jeder Zeile innerhalb jeder ID Partition eine eindeutige Nummer zu, alphabetisch nach Name geordnet, unter Verwendung von ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name).
  2. Rekursive Verkettung: Ein rekursiver Common Table Expression (CTE) hängt iterativ Name Werte basierend auf den zugewiesenen Zeilennummern an.
  3. Endgültige Auswahl: Filtert die Ergebnisse, um nur die Zeilen mit dem höchsten NameNumber innerhalb jeder Partition beizubehalten, wodurch eine einzelne verkettete Zeichenfolge pro ID entsteht.

Hinweis: Bei dieser Abfrage wird eine Gruppierung nach ID und eine aufsteigende alphabetische Reihenfolge der Zeichenfolgen vorausgesetzt. Abhängig von Ihrer spezifischen Datenstruktur und Ihren Anforderungen können Anpassungen erforderlich sein. Die nvarchar(max)-Umwandlung gewährleistet eine ausreichende Stringlänge für große verkettete Ergebnisse.

Das obige ist der detaillierte Inhalt vonWie kann ich Zeichenfolgen aus mehreren Zeilen in SQL Azure effizient verketten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn