Ja, SQL Server erbjuder flera sätt att sammanfoga alla värden från en kolumn till en enda kommaseparerad sträng utan att använda slingor eller markörer. De mest effektiva metoderna involverar i allmänhet att använda `String_agg '(finns i SQL Server 2017 och senare) eller` för XML Path' (fungerar också i äldre versioner).
Metod 1:Använda `String_agg` (SQL Server 2017 och senare)
Detta är det enklaste och mest effektiva tillvägagångssättet för moderna SQL Server -versioner:
`` `SQL
Välj String_agg (YourColumn, ',') som sammankopplade värden
Från YourTable;
`` `
Byt ut `YourTable 'och` YourColumn' med de faktiska namnen på din tabell och kolumn. Detta kommer att returnera en enda rad med alla värden från "YourColumn" sammankopplade till en enda sträng, separerad med komma.
Metod 2:Använda `för XML Path` (SQL Server 2016 och tidigare)
För äldre SQL -serverversioner ger `för XML Path` en liknande funktionalitet:
`` `SQL
Välj saker ((
Välj ',' + din kolumn
Från YouRable
För XML -banan ('')
), 1, 1, '') som sammankopplade värden;
`` `
Den här metoden använder en underkvis för att sammanfoga värdena med komma och sedan tar "Stuff" -funktionen bort det ledande komma.
Exempel:
Låt oss säga att du har en tabell som heter "Anställdas" med en kolumn som heter "EmployeName":
| EmployeName |
| --- | --- |
| John Doe |
| Jane Smith |
| David Lee |
Använda `String_agg`:
`` `SQL
Välj String_agg (EmployeEname, ',') som anställda namn
Från anställda;
`` `
Detta skulle återvända:
| EmployeNames |
| --- | --- |
| John Doe, Jane Smith, David Lee |
Använda `för XML Path ':
`` `SQL
Välj saker ((
Välj ',' + EmployeName
Från anställda
För XML -banan ('')
), 1, 1, '') som anställningsnamn;
`` `
Detta skulle också återvända:
| EmployeNames |
| --- | --- |
| John Doe, Jane Smith, David Lee |
Viktiga överväganden:
* nollvärden: Båda metoderna hanterar "noll" -värden genom att effektivt ignorera dem. Om du behöver representera "null" -värden i din sammankopplade sträng (t.ex. med en speciell markör som "null") måste du lägga till ett "fall" -uttalande inom aggregeringen. Till exempel med `String_agg`:
`` `SQL
Välj String_agg (fall när anställda är null då 'null' annars anställda slut ',') som anställda namn
Från anställda;
`` `
* Datatyp: Se till att datatypen för din kolumn är kompatibel med sträng sammankoppling. Använd vid behov `cast 'eller` konvertera' för att konvertera kolumnen till en lämplig datatyp (t.ex. 'Varchar').
* Prestanda: För mycket stora tabeller är "String_agg" i allmänhet mer performant än "för XML Path".
Välj den metod som är lämplig för din SQL -serverversion. `String_agg` är det föredragna och mer läsbara alternativet om din SQL -serverversion stöder det.