You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2008 R2中按指定AttributeID生成逗号分隔输出的方法

Solution for Concatenating Descriptions in SQL Server 2008 R2

没问题,这个需求在SQL Server 2008 R2里完全可以实现。因为这个版本还不支持SQL Server 2017及以上的STRING_AGG函数,所以我们得用经典的FOR XML PATH方法来完成字符串拼接。

实现代码

下面是直接可用的SQL语句,记得把YourTableName替换成你实际的表名:

SELECT 
    EntryID,
    -- 用STUFF去掉开头多余的逗号和空格
    STUFF((
        SELECT ', ' + Description
        FROM YourTableName t2
        -- 关联同一个EntryID的记录
        WHERE t2.EntryID = t1.EntryID
          -- 只筛选指定的AttributeID
          AND t2.AttributeID IN (5, 15, 25)
        -- 拼接成无标签的XML字符串
        FOR XML PATH(''), TYPE
    -- 把XML转换为普通字符串
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS ConcatenatedDescriptions
FROM YourTableName t1
WHERE t1.AttributeID IN (5, 15, 25)
-- 按EntryID分组,确保每个EntryID只返回一行
GROUP BY EntryID;

代码解释

  • FOR XML PATH(''):将子查询中每个符合条件的Description拼接成一段无XML标签的字符串,比如会生成, Red, Large, Cotton这样的内容。
  • TYPE:确保特殊字符(比如&、<)被正确转义,避免出现XML实体编码问题。
  • .value('.', 'NVARCHAR(MAX)'):把XML格式的结果转换为普通的字符串类型。
  • STUFF:从字符串的第1位开始,删除前2个字符(也就是开头的, ),得到干净的拼接结果。

测试示例

假设你的表有以下数据:

EntryIDAttributeIDDescription
15Red
115Large
125Cotton
135Ignore
25Blue
225Polyester

运行上述SQL后,会得到这样的结果:

EntryIDConcatenatedDescriptions
1Red, Large, Cotton
2Blue, Polyester

如果你的Description字段可能包含NULL值,可以在子查询里加上ISNULL(Description, ''),避免拼接出NULL导致整个字符串失效。

内容的提问来源于stack exchange,提问作者Kyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:38