Объединить значения в поле - PullRequest
0 голосов
/ 12 декабря 2011

У меня проблема.

Мне нужно объединить значения столбца в одно поле, разделенные точкой с запятой. Я использую путь XML, но время ответа очень велико.

Это мой стол:

ID   COLOR
1    WHITE
1    RED
2    BLACK
2    RED

Вот что мне нужно вывести:

ID   COLORS
1    WHITE; RED
2    BLACK; RED

Как я могу это сделать?

Действительно, мой код такой:

SELECT *
FROM 
Client A
OUTER APPLY (SELECT Origen  + '; '
         FROM ( SELECT DISTINCT F.IdSC, C.Origen
            FROM SC F
                LEFT JOIN OrigenSC B ON F.IdSC = B.IdSC
            LEFT JOIN Origen   C ON B.IdOrigen = C.IdOrigen                             
        ) D
    WHERE D.Id = A.IdSC
    ORDER BY D.Origen
    FOR XML PATH('')) H (Origen)

1 Ответ

0 голосов
/ 13 декабря 2011

Учитывая приведенный выше пример COLORS, вы можете попробовать вот что:

create table Colors
(
    ID INT,
    COLOR varchar(32)
)

INSERT INTO Colors values(1, 'WHITE')
INSERT INTO Colors values(1, 'RED')
INSERT INTO Colors values(2, 'BLACK')
INSERT INTO Colors values(2, 'RED')
INSERT INTO Colors values(3, 'GREEN')
INSERT INTO Colors values(3, 'RED')

WITH UniqueColors AS ( SELECT DISTINCT ID FROM Colors )
SELECT 
    ID,
    STUFF(
            (   SELECT '; '+COLOR 
                FROM Colors 
                WHERE ID = UniqueColors.ID 
                FOR XML PATH('') 
            ) 
            , 1, 2, ''
        ) AS [ColorList]
FROM UniqueColors

Это было взято из другого примера на SO.

...