SQL Server 2008两表关联时拼接item_number列的实现方法
SQL Server 2008 实现分组拼接字段的方案
SQL Server 2008 没有后续版本内置的STRING_AGG聚合函数,需要配合FOR XML PATH语法和STUFF函数实现同分组下的字段拼接,完整查询语句如下:
SELECT o.order_id, o.order_total, STUFF( ( SELECT ', ' + i.item_number FROM Items i WHERE i.order_id = o.order_id -- 如果需要指定拼接顺序可以加ORDER BY子句,不需要可删除 ORDER BY i.item_number FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS item_number_concat FROM Orders o GROUP BY o.order_id, o.order_total
关键逻辑说明
- 子查询中
FOR XML PATH('')会把查询到的多行item_number值统一拼接为单字符串,每个值前面统一加,前缀,所以最终拼接结果开头会多出来长度为2的多余字符(逗号+空格) STUFF函数的作用就是删除字符串开头的2个冗余字符,得到符合要求的拼接结果- 加上
TYPE和.value的写法可以避免特殊字符(比如&、<)被自动转义的问题,兼容性更好
用你提供的示例数据执行以上语句,即可得到期望的查询结果。
内容的提问来源于stack exchange,提问作者Joe Defill
相关产品推荐
相关产品推荐

