sql >> Databáze >  >> RDS >> Sqlserver

Více řádků na jednu hodnotu oddělenou čárkami na serveru SQL Server

Testovací data

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

Dotaz

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

Sada výsledků

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

SQL Server 2017 a novější verze

Pokud pracujete na SQL Server 2017 nebo novějších verzích, můžete k vytvoření seznamu odděleného čárkami použít vestavěnou funkci SQL Server Function STRING_AGG:

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;

Sada výsledků

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



  1. Jak vypočítat rozdíl mezi dvěma daty v PostgreSQL/Oracle

  2. PostgreSQL:jak převést z epochy Unixu na datum?

  3. převést php datum do formátu mysql

  4. Jak ELT() funguje v MariaDB