Heim > Datenbank > MySQL-Tutorial > Wie kann ich Zeichenfolgen in SQL Azure ohne CLR-Aggregatfunktionen optimal verketten?

Wie kann ich Zeichenfolgen in SQL Azure ohne CLR-Aggregatfunktionen optimal verketten?

Mary-Kate Olsen
Freigeben: 2025-01-20 09:16:10
Original
533 Leute haben es durchsucht

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

SQL Azure String-effiziente Verbindungslösung

In SQL Azure ist die effiziente Zusammenfassung unterschiedlicher Zeichenfolgendaten in einer einzigen Entität von entscheidender Bedeutung. Aufgrund des Mangels an benutzerdefinierten CLR-Aggregatfunktionen in SQL Azure müssen effiziente Alternativen gefunden werden.

Transact SQL-Lösung

Eine effiziente Möglichkeit ist die Verwendung der WITH-Klausel und des rekursiven CTE (Common Table Expression). Diese Methode beinhaltet:

  1. Verwenden Sie ROW_NUMBER() und PARTITION BY, um die Zeilen innerhalb der Partition zu nummerieren und die Verbindungsreihenfolge zu definieren.
  2. Verwenden Sie den rekursiven CTE (Concatenated) iterativ, um die verkettete Zeichenfolge zu erstellen.
  3. Filtern Sie die Ergebnisse so, dass nur die endgültigen aggregierten Ergebnisse enthalten sind (wobei NameNumber = NameCount).

Beschreibung

Bitte beachten Sie die folgende Anfrage:

<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>
Nach dem Login kopieren

Beispiel

Für die folgenden Daten:

<code>ID      Name
------- --------
1       Matt
1       Rocks
2       Stylus
3       Foo
3       Bar
3       Baz</code>
Nach dem Login kopieren

Gibt die folgenden Gesamtergebnisse zurück:

<code>ID      FullName
------- ---------------------
1       Matt, Rocks
2       Stylus
3       Foo, Bar, Baz</code>
Nach dem Login kopieren

Vorteile

  • Für SQL Azure
  • Relativ effizient, insbesondere für kleinere Datensätze
  • Einfache Anpassung an bestimmte Verbindungsszenarien (z. B. Sortierreihenfolge, Trennzeichen)

Hinweis: Um den Längenüberlauf des Datentyps nvarchar zu vermeiden, ändern Sie den Typ von CAST in nvarchar(max). Darüber hinaus unterscheidet sich die Sortierung in den Beispielergebnissen geringfügig vom Originaltext. Dies liegt daran, dass die Sortierbasis von ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) das Feld „Name“ ist, was zu Unterschieden in den Sortierergebnissen führt. Wenn Sie eine bestimmte Sortiermethode benötigen, ändern Sie die ORDER BY-Klausel.

Das obige ist der detaillierte Inhalt vonWie kann ich Zeichenfolgen in SQL Azure ohne CLR-Aggregatfunktionen optimal verketten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage