Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wiele wierszy do jednej wartości oddzielonej przecinkami w Sql Server

Dane testowe

DECLARE @Table1 TABLE(ID INT, Value INT)
INSERT INTO @Table1 VALUES (1,100),(1,200),(1,300),(1,400)

Zapytanie

SELECT  ID
       ,STUFF((SELECT ', ' + CAST(Value AS VARCHAR(10)) [text()]
         FROM @Table1 
         WHERE ID = t.ID
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM @Table1 t
GROUP BY ID

Zestaw wyników

╔════╦═════════════════════╗
║ ID ║     List_Output     ║
╠════╬═════════════════════╣
║  1 ║  100, 200, 300, 400 ║
╚════╩═════════════════════╝

SQL Server 2017 i nowsze wersje

Jeśli pracujesz na SQL Server 2017 lub nowszych wersjach, możesz użyć wbudowanej funkcji SQL Server STRING_AGG, aby utworzyć listę rozdzielaną przecinkami:

DECLARE @Table1 TABLE(ID INT, Value INT);
INSERT INTO @Table1 VALUES (1,100),(1,200),(1,300),(1,400);


SELECT ID , STRING_AGG([Value], ', ') AS List_Output
FROM @Table1
GROUP BY ID;

Zestaw wyników

╔════╦═════════════════════╗
║ ID ║     List_Output     ║
╠════╬═════════════════════╣
║  1 ║  100, 200, 300, 400 ║
╚════╩═════════════════════╝



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napraw „Błąd przepełnienia arytmetycznego podczas konwersji TOŻSAMOŚCI na typ danych…” w SQL Server

  2. Pobierz obraz z bazy danych w asp.net

  3. Jakie jest znaczenie 1/1/1753 w SQL Server?

  4. Funkcje agregujące MIN i MAX w SQL Server

  5. T-SQL Cast a konwertuj