Объединение нескольких строк с одинаковым идентификатором в SQL Server - PullRequest
0 голосов
/ 11 июня 2019

Каков наиболее эффективный способ объединения нескольких строк значений с одним и тем же идентификатором в SQL Server?

Таблица исходных данных dbo.ProductCategory:

+-----------+----------+------+
| ProductID |  CATID   |  AA  |
+-----------+----------+------+
|  1        | 123      | A    |
|  1        | 412      | B    |
|  2        | 567      | C    |
|  2        | 521      | A    |
|  3        |   2      | D    |
|  3        |   5      | A    |
|  4        |   6      | C    |
|  4        |   8      | E    |
|  4        | 123      | A    |
+----+------+----------+------+

И я пытаюсь добиться следующего результата

+-----------+----------+------+
| ProductID |  CATID   |  AA  |
+-----------+----------+------+
|  1        | 123,412  | A,B  |
|  2        | 567,521  | C,A  |
|  3        | 2,5      | D,A  |
|  4        | 6,8,123  | C,E,A|
+----+------+----------+------+

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Пример данных

DECLARE @Temp AS TABLE (ProductID INT,  CATID  INT,  AA  CHAR(2))
INSERT INTO @Temp
SELECT 1 , 123 , 'A' UNION ALL    
SELECT 1 , 412 , 'B' UNION ALL    
SELECT 2 , 567 , 'C' UNION ALL    
SELECT 2 , 521 , 'A' UNION ALL    
SELECT 3 ,   2 , 'D' UNION ALL    
SELECT 3 ,   5 , 'A' UNION ALL    
SELECT 4 ,   6 , 'C' UNION ALL    
SELECT 4 ,   8 , 'E' UNION ALL    
SELECT 4 , 123 , 'A' 

Использование STUFF () на сервере sql

SELECT ProductID,STUFF((SELECT CONCAT(', ', CATID) 
                        FROM @Temp i 
                        WHERE i.ProductID = o.ProductID
                FOR XML PATH ('')),1,1,'') AS CATID
                ,STUFF((SELECT CONCAT(', ', AA) 
                        FROM @Temp i 
                        WHERE i.ProductID = o.ProductID
                FOR XML PATH ('')),1,1,'') AS AA
FROM @Temp o
GROUP BY ProductID

Результат

ProductID   CATID         AA
------------------------------------
1           123, 412     A , B 
2           567, 521     C , A 
3           2, 5         D , A 
4           6, 8, 123    C , E , A 
0 голосов
/ 11 июня 2019

В SQL Server 2017+ вы можете использовать STRING_AGG

select ProductId, STRING_AGG(CATID, ',') as CATID, STRING_AGG(AA, ',') AA
from PC
GROUP BY ProductID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...