如何在MSSQL中按SOURCEID分组合并SOURCE_CATEGORY表的NAME字段?
MSSQL按SOURCEID分组合并NAME字段实现方案
适用SQL Server 2017及以上版本(推荐)
使用STRING_AGG函数直接按分组拼接NAME字段,语法简洁高效:
SELECT SOURCEID, STRING_AGG(NAME, ',') AS NAME_LIST FROM SOURCE_CATEGORY GROUP BY SOURCEID
适用SQL Server 2016及以下版本
通过FOR XML PATH方式实现字符串拼接:
SELECT sc.SOURCEID, STUFF(( SELECT ',' + NAME FROM SOURCE_CATEGORY WHERE SOURCEID = sc.SOURCEID FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS NAME_LIST FROM SOURCE_CATEGORY sc GROUP BY sc.SOURCEID
迁移到MongoDB的后续处理
查询得到的NAME_LIST是逗号分隔的字符串,迁移时可通过以下方式转成数组:
- 若使用MongoDB Compass导入:在导入映射阶段,将
NAME_LIST字段设置为拆分字符串,分隔符选逗号,自动转为数组。 - 若用自定义脚本(如Python):读取SQL结果后,对每个记录的
NAME_LIST执行拆分操作:
# 示例代码片段 for record in sql_query_results: record['NAME'] = record.pop('NAME_LIST').split(',') # 随后将处理后的记录插入MongoDB集合
内容的提问来源于stack exchange,提问作者xxestter
相关产品推荐
相关产品推荐

