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

Jak używać GROUP BY do łączenia ciągów w SQL Server?

Nie są potrzebne CURSOR, WHILE ani funkcja zdefiniowana przez użytkownika .

Wystarczy być kreatywnym z FOR XML i PATH.

[Uwaga:to rozwiązanie działa tylko w SQL 2005 i nowszych wersjach. Pierwotne pytanie nie określało używanej wersji.]

CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT)

INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9)

SELECT 
  [ID],
  STUFF((
    SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) 
    FROM #YourTable 
    WHERE (ID = Results.ID) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
  ,1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY ID

DROP TABLE #YourTable


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP wywołujący skrypt bazy danych kopii zapasowej sqlserver, plik kopii zapasowej utworzony, a następnie usunięty

  2. Nowe zmiany w kolumnach zawierających tylko metadane w SQL Server 2016

  3. Automatyzacja przetwarzania modelu tabelarycznego baz danych usług Analysis Services (SSAS) w programie SQL Server

  4. Usuń połączony serwer w SQL Server za pomocą T-SQL

  5. Zapytanie SQL Server w celu znalezienia wszystkich uprawnień/dostępu dla wszystkich użytkowników w bazie danych