Herausforderung:
Gegeben sind zwei Tabellen, eine mit durch Kommas getrennten Daten Die Aufgabe besteht darin, Daten aus den Tabellen abzurufen und die Ergebnisse darzustellen, wobei die durch Kommas getrennten Werte zu einer einzigen Zeichenfolge für zusammengefügt werden jede Zeile.
Normalisierung:
Ein idealer Ansatz wäre, die Tabelle mit der durch Kommas getrennten Datenspalte zu normalisieren und so zu eliminieren Bedarf an komplexen String-Manipulationen. Indem Sie eine neue Tabelle erstellen, in der jeder durch Kommas getrennte Wert zu einer neuen Zeile wird, können Sie die Tabellen dann problemlos in einem gemeinsamen Feld zusammenführen.
Split-Funktion:
If Wenn eine Normalisierung nicht möglich ist, kann eine Split-Funktion erstellt werden, um die durch Kommas getrennten Werte in Zeilen umzuwandeln, die zusammengefügt werden können. Diese Funktion kann dann verwendet werden, um entweder die Daten in mehreren Zeilen zu belassen oder die Werte wieder in einer durch Kommas getrennten Liste zu verketten.
FÜR XML-PFAD und STUFF:
Alternativ können Sie die Techniken FOR XML PATH und STUFF verwenden, um die Daten abzurufen. FOR XML PATH konvertiert die durch Kommas getrennten Werte in XML, und STUFF kann verwendet werden, um das XML zu einer einzelnen Zeichenfolge zu verketten.
Direkte FOR XML PATH-Anwendung:
Ein letzter Ansatz besteht darin, FOR XML PATH direkt auf die Datenspalte anzuwenden. Durch Auswahl der gewünschten Spalten und Verwendung der entsprechenden Abfrage können Sie die durch Kommas getrennten Werte abrufen und in einer einzigen Zeichenfolge zusammenfassen.
Je nach gewähltem Ansatz erfolgt die Implementierung wird variieren. Die folgenden Beispiele geben einen kurzen Überblick darüber, wie die einzelnen Methoden implementiert werden können:
Normalisierung:
CREATE TABLE NormalizedTable ( id INT, value VARCHAR(255), ); INSERT INTO NormalizedTable (id, value) VALUES (1, 'john'), (2, 'alex'), (3, 'piers'), (4, 'sara'), (5, 'C1'), (6, 'C2'), (7, 'C3'), (8, 'C4'), (9, 'R1'), (10, 'R2'), (11, 'R3'); SELECT DISTINCT T2.col1, STUFF(( SELECT ', ' + T1.col2 FROM NormalizedTable T1 INNER JOIN Table2 T2 ON T1.id = T2.col2 FOR XML PATH('') ), 1, 2, '');
Split-Funktion:
CREATE FUNCTION dbo.Split (@String VARCHAR(MAX), @Delimiter CHAR(1)) RETURNS TABLE AS RETURN WITH CTE AS ( SELECT 1 AS RowNum, @String AS Value UNION ALL SELECT RowNum + 1, SUBSTRING(@String, RowNum + 1, LEN(@Delimiter)) FROM CTE WHERE SUBSTRING(@String, RowNum + 1, LEN(@Delimiter)) <> '' ) SELECT RowNum, Value AS Item FROM CTE; -- Usage SELECT DISTINCT T2.col1, STUFF(( SELECT ', ' + T1.col2 FROM ( SELECT DISTINCT Value AS col2 FROM dbo.Split(T2.col2, ',') ) T1 FOR XML PATH('') ), 1, 2, '');
FÜR XML-PFAD und STUFF:
SELECT T2.col1, ( SELECT ', ' + T1.col2 FROM Table1 T1 WHERE ',' + T2.col2 + ',' LIKE '%,' + CAST(T1.col1 AS VARCHAR(10)) + ',%' FOR XML PATH('') ).value('substring(text()[1], 3)', 'VARCHAR(MAX)') AS col2 FROM Table2 T2;
Durch Auswahl des geeigneten Ansatzes und Implementierung des erforderlichen Codes können Sie durch Kommas getrennte Daten effektiv in einer einzigen Zeichenfolge für jede Zeile in der Tabelle zusammenfassen.
Das obige ist der detaillierte Inhalt vonWie verbinde ich durch Kommas getrennte Datenspalten in SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!