Heim >Datenbank >MySQL-Tutorial >Wie verketten „STUFF' und „FOR XML PATH' Namen in SQL Server für doppelte IDs?

Wie verketten „STUFF' und „FOR XML PATH' Namen in SQL Server für doppelte IDs?

DDD
DDDOriginal
2025-01-22 22:52:14949Durchsuche

How Do `STUFF` and `FOR XML PATH` Concatenate Names in SQL Server for Duplicate IDs?

SQL Server: Verketten von Namen für doppelte IDs mithilfe von STUFF und FOR XML PATH

Diese Anleitung zeigt, wie Sie mehrere Namen, die mit doppelten IDs in einer SQL Server-Tabelle verknüpft sind, verketten, was zu einer durch Kommas getrennten Liste von Namen für jede eindeutige ID führt. Dies erreichen wir durch die kraftvolle Kombination von STUFF und FOR XML PATH.

Szenario:

Stellen Sie sich eine Tabelle mit doppelten IDs und entsprechenden Namen vor. Das Ziel besteht darin, eine neue Spalte zu erstellen, die alle Namen für jede ID enthält, sauber durch Kommas getrennt.

Lösung:

Die Lösung verwendet einen dreistufigen Prozess:

Schritt 1: Generieren der durch Kommas getrennten XML-Zeichenfolge

Der Kern der Lösung besteht darin, FOR XML PATH('') zu nutzen, um aus den Namen eine durch Kommas getrennte Zeichenfolge zu generieren.

<code class="language-sql">SELECT ',' + name
FROM temp1
FOR XML PATH('')</code>

Dadurch wird eine XML-Zeichenfolge generiert, in der jedem Namen ein Komma vorangestellt ist.

Schritt 2: Entfernen des führenden Kommas

Die resultierende XML-Zeichenfolge aus Schritt 1 beginnt mit einem unnötigen Komma. STUFFentfernt dies elegant.

<code class="language-sql">STUFF(
  (SELECT ',' + name FROM temp1 FOR XML PATH('')),
  1,
  1,
  ''
)</code>

STUFF ersetzt das erste Zeichen (das führende Komma) durch eine leere Zeichenfolge.

Schritt 3: Zusammenfügen, Gruppieren und Endergebnis

Abschließend kombinieren wir die oben genannten Schritte mit einer JOIN- und GROUP BY-Klausel, um das gewünschte Ergebnis zu erzielen.

<code class="language-sql">SELECT ID,
  ConcatenatedNames = STUFF(
    (SELECT ',' + name
    FROM temp1 t1
    WHERE t1.id = t2.id
    FOR XML PATH (''))
  , 1, 1, '')
FROM temp1 t2
GROUP BY id;</code>

Diese Abfrage verknüpft die Unterabfrage (die die durch Kommas getrennte Zeichenfolge generiert) mit der Originaltabelle (temp1) basierend auf ID. Die GROUP BY-Klausel stellt sicher, dass die Verkettung für jede eindeutige ID erfolgt. Die resultierende Spalte ConcatenatedNames enthält die durch Kommas getrennte Liste der Namen für jede ID.

Das obige ist der detaillierte Inhalt vonWie verketten „STUFF' und „FOR XML PATH' Namen in SQL Server für doppelte IDs?. 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