Concatenate column values for rows with the same values (of different columns)

前端 未结 3 1440
余生分开走
余生分开走 2020-12-07 03:28

SQL Server 2005

I have a table which returns

ID  name    prop    value
--------------------------
1   one     Prop1   a
1   one     Prop1   b
1   one         


        
3条回答
  •  一生所求
    2020-12-07 03:45

    try this:

    --Concatenation with FOR XML and eleminating control/encoded character expansion "& < >"
    set nocount on;
    declare @YourTable table (RowID int, RowName varchar(5), prop varchar(5), RowValue varchar(5))
    
    insert into @YourTable VALUES (1,'one','Prop1','a')
    insert into @YourTable VALUES (1,'one','Prop1','b')
    insert into @YourTable VALUES (1,'one','Prop2','c')
    insert into @YourTable VALUES (2,'two','Prop1','d')
    insert into @YourTable VALUES (2,'two','Prop2','e')
    set nocount off
    
    SELECT
        t1.RowID,t1.RowName,t1.Prop
            ,STUFF(
                       (SELECT
                            ', ' + t2.RowValue
                            FROM @YourTable t2
                            WHERE t1.RowID=t2.RowID AND t1.RowName=t2.RowName AND t1.Prop=t2.Prop
                            ORDER BY t2.RowValue
                            FOR XML PATH(''), TYPE
                       ).value('.','varchar(max)')
                       ,1,2, ''
                  ) AS ChildValues
        FROM @YourTable t1
        GROUP BY t1.RowID,t1.RowName,t1.Prop
    

    OUTPUT:

    RowID       RowName Prop  ChildValues
    ----------- ------- ----- ------------
    1           one     Prop1 a, b
    1           one     Prop2 c
    2           two     Prop1 d
    2           two     Prop2 e
    
    (4 row(s) affected)
    

提交回复
热议问题