将行值合并为CSV(对于SQL Server,也称为GROUP_CONCAT)

Moo*_*ons 10 sql sql-server

我有一张桌子:

EntityID   AttributeID  OptionText
5016       20           Paintings
5044       18           Female
5060       48           M
5060       48           F
5060       49           Apple
5060       49           Banana
5060       49           Cat
Run Code Online (Sandbox Code Playgroud)

我想创建一个将显示的视图:

5016    20   Paintings
5044    18   Female
5060    48   M,F
5060    49   Apple, Banana, Cat
Run Code Online (Sandbox Code Playgroud)

均值每个实体的属性值应以逗号分隔显示.

选项的数量可以变化.

任何帮助表示赞赏!

gbn*_*gbn 11

对于每对EntityID, AttributeID使用XML路径技巧来生成CSV

 SELECT
    M.EntityID, M.AttributeID,
    SUBSTRING(CAST(foo.bar AS varchar(8000)), 2, 7999) AS Options
FROM
    (
    SELECT DISTINCT EntityID, AttributeID
    FROM MyTable
    ) M
    CROSS APPLY
    (
    SELECT
        ',' + OptionText
    FROM
        MyTable M2
    WHERE
        M.EntityID = M2.EntityID AND M.AttributeID= M2.AttributeID
    FOR XML PATH ('')
    ) foo(bar)
Run Code Online (Sandbox Code Playgroud)