在字段中加入值

时间:2011-12-12 15:15:04

标签: sql sql-server-2008 tsql group-concat

我有一个问题。

我需要在一个字段中加入列的值,用分号分隔。 我使用XML Path,但响应时间很长。

这是我的表:

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 :(得分:0)

鉴于上面的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上的其他一些例子中得到的。