Heim >Datenbank >MySQL-Tutorial >Wie kombiniere ich mehrere SQL Server-Zeilen in einer einzigen durch Kommas getrennten Spalte?

Wie kombiniere ich mehrere SQL Server-Zeilen in einer einzigen durch Kommas getrennten Spalte?

Barbara Streisand
Barbara StreisandOriginal
2025-01-21 07:02:361025Durchsuche

How to Combine Multiple SQL Server Rows into a Single Comma-Delimited Column?

Mehrere Zeilen in einer Spalte mit durch Kommas getrennten Werten in SQL Server zusammenführen

Frage:

Sie müssen mehrere Zeilen mit gemeinsamen Bezeichnern in einer einzigen Spalte zusammenführen, wobei die Werte durch Kommas getrennt sind. Sie möchten beispielsweise Daten abrufen von:

<code>[TicketID]  [Person]
T0001       Alice
T0001       Bob
T0002       Catherine
T0002       Doug
T0003       Elaine</code>

Konvertieren in:

<code>[TicketID]  [People]
T0001       Alice, Bob
T0002       Catherine, Doug
T0003       Elaine</code>

Lösung für SQL Server 2005:

  1. Verwenden Sie die STUFF-Funktion, um Werte in einer einzigen Zeichenfolge zu kombinieren:
<code class="language-sql">STUFF(ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '')</code>
  1. Die FOR XML PATH-Klausel gruppiert Werte und gibt sie als XML-Strings zurück.
  2. Die
  3. TYPE-Klausel gibt an, dass das Ergebnis eine Textzeichenfolge sein soll.
  4. Die Funktion
  5. value extrahiert Text aus einer XML-Zeichenfolge.
  6. Die ISNULL-Funktion behandelt den Fall, in dem keine Werte zum Kombinieren vorhanden sind.
  7. Die letzte STUFF-Funktion entfernt führende Kommas aus der kombinierten Zeichenfolge, sofern vorhanden.

Beispielabfrage:

<code class="language-sql">SELECT t.TicketID,
       STUFF(ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') [无前导逗号],
       ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), '') [如果非空则有前导逗号]
  FROM @Tickets t
GROUP BY t.TicketID</code>

Das obige ist der detaillierte Inhalt vonWie kombiniere ich mehrere SQL Server-Zeilen in einer einzigen durch Kommas getrennten Spalte?. 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