如何使用Split_String将字段拆分为多行并保留对应关联列数据
字段按分隔符拆分为多行实现方案
SQL Server 2016及以上版本(原生STRING_SPLIT实现)
直接使用STRING_SPLIT结合CROSS APPLY即可完成需求,示例代码如下:
SELECT t.Name, t.TimeStamp, s.value AS StudentIds, t.Category, t.ReportName FROM 你的实际表名 t CROSS APPLY STRING_SPLIT(t.StudentIds, ',') s
逻辑说明:
STRING_SPLIT(待拆分字段, 分隔符)会将字段按指定分隔符拆分,返回单列结果集,列名为value,存储拆分后的每个值CROSS APPLY会将原表每一行和该行拆分出的多行结果做关联,原行的其余列数据会完整保留,完全匹配你的需求
低版本SQL Server兼容方案(不支持STRING_SPLIT的场景)
可以通过XML转换的方式实现拆分,示例代码如下:
SELECT t.Name, t.TimeStamp, LTRIM(RTRIM(s.n.value('.', 'VARCHAR(100)'))) AS StudentIds, t.Category, t.ReportName FROM ( SELECT *, CAST('<X>'+REPLACE(StudentIds, ',', '</X><X>')+'</X>' AS XML) AS xml_split FROM 你的实际表名 WHERE StudentIds IS NOT NULL AND StudentIds != '' -- 提前过滤空值避免无效行 ) t CROSS APPLY xml_split.nodes('X') s(n)
逻辑说明:
先把逗号分隔的字符串替换为XML节点格式,再通过nodes()方法拆解每个节点,最终提取出每个拆分后的ID,LTRIM和RTRIM用于去除拆分结果前后可能存在的空格。
注意事项
如果原表存在StudentIds为空或NULL的行,可以在查询末尾添加过滤条件,避免生成多余的空值记录。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

