基于公共列SQL Server组合另一行

时间:2018-05-29 16:05:38

标签: sql-server

从这样的表格中:

enter image description here

我需要像这样的结果

Declare @Attributes TABLE
(
    Varient Varchar(20),
    AllAttributes VARCHAR(MAX),
    GUID Varchar(50)
)

INSERT INTO @Attributes
select PV.Varient_Name,PVV.Varient_Value,PA.GUID
FROM tblproductattribute PA
INNER JOIN Product_Varients PV ON PV.Id = PA.AttributeID
INNER JOIN Product_Varient_Value PVV ON PVV.Id = PA.AttributeValue
WHERE PA.GUID='2C2E23A5-AF08-4DC0-98A7-035EE6E7A06D' --and PA.AttributeID = 1

Select * from @Attributes

查询:

rename_all

1 个答案:

答案 0 :(得分:2)

这可以使用STUFF和FOR XML完成。如果您将来发布ddl和示例数据,那将会更有帮助。我这次为你做了这件事,所以你可以看到将来应该怎么做。

没有字母" e"在变体中。我建议你在表格中改变它,否则你将永远拼错它。

declare @Something table
(
    Variant varchar(10)
    , AllAttributes varchar(10)
    , GUID uniqueidentifier
)

declare @MyGuid uniqueidentifier = newid()

insert @Something values
('color', 'red', @MyGuid)
, ('color', 'Blue', @MyGuid)
, ('size', '34', @MyGuid)

select Variant
    , STUFF((select ',' + s2.AllAttributes
            from @Something s2
            where s2.GUID = s.GUID
                and s2.Variant = s.Variant
            for XML PATH('')), 1,1 , '') as Details
from @Something s
group by s.Variant
    , s.GUID