SQL: агрегирование строк - PullRequest
       1

SQL: агрегирование строк

14 голосов
/ 28 марта 2011

В моей базе данных SQL Server 2005, используя запрос SLQ, кто-нибудь знает лучший способ группировки записей по одному полю и получения списка значений через запятую из другого?
Так что, если у меня есть:

UserID        Code
  1            A
  1            C5
  1            X
  2            V3
  3            B
  3            D
  3            NULL
  3            F4
  4            NULL

Я бы получил:

 UserID        Code
  1            A,C5,X
  2            V3
  3            B,D,F4
  4            NULL

Спасибо за любую помощь.

Ответы [ 2 ]

17 голосов
/ 28 марта 2011
WITH Data AS (
    SELECT 1 UserId, 'A' Code 
    UNION ALL 
    SELECT 1, 'C5'
    UNION ALL 
    SELECT 1, 'X'
    UNION ALL 
    SELECT 2, 'V3'
    UNION ALL 
    SELECT 3, 'B'
    UNION ALL 
    SELECT 3, 'D'
    UNION ALL 
    SELECT 3, NULL
    UNION ALL 
    SELECT 3, 'F4'
    UNION ALL 
    SELECT 4, NULL
)
SELECT U.UserId, STUFF((
    SELECT ','+Code FROM Data WHERE Data.UserID = U.UserID FOR XML PATH('')
), 1, 1, '') Code 
FROM (SELECT DISTINCT UserID FROM Data) U

Просто замените Data CTE на имя таблицы, и все готово.

2 голосов
/ 28 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...