SQL Server 2014如何按列分隔值拆分现有数据生成新行
SQL Server 2014 按分隔标识拆分行实现方案
核心逻辑
当前测试表为固定3组值的平铺结构,通过SEPERATOR_A、SEPERATOR_B字段的^标记判断是否需要生成对应分组的行,无需依赖高版本才支持的STRING_SPLIT函数,直接用UNION ALL按规则拼接各组数据即可,完全兼容SQL Server 2014,执行效率最优。
拆分规则:
- 所有记录默认返回第一组字段(
CODE/M_U/M_C)作为基础行 - 当
SEPERATOR_A值为^时,提取第二组字段(CODE1/M1_U/M1_C)生成新行 - 当
SEPERATOR_B值为^时,提取第三组字段(CODE2/M2_U/M2_C)生成新行
实现代码
SELECT ID, CODE, M_U, M_C FROM #test UNION ALL SELECT ID, CODE1, M1_U, M1_C FROM #test WHERE SEPERATOR_A = '^' UNION ALL SELECT ID, CODE2, M2_U, M2_C FROM #test WHERE SEPERATOR_B = '^' ORDER BY ID;
执行结果
针对提供的3条样例数据,执行后返回6行结果,完全匹配预期拆分效果:
| ID | CODE | M_U | M_C |
|---|---|---|---|
| 123 | 1 | ABC | XYZ |
| 456 | G4762 | D01 | 398 |
| 456 | G4765 | E043 | NULL |
| 893 | H7832 | U73 | R12 |
| 893 | H9833 | NULL | F82 |
| 893 | H563 | U83 | NULL |
若后续遇到单字段存储多段分隔值、分组数量不固定的场景,可提前构建0-1000的连续数字辅助表,结合
SUBSTRING、CHARINDEX函数实现通用拆分逻辑,无需升级SQL Server版本。
内容的提问来源于stack exchange,提问作者Krisha
相关产品推荐
相关产品推荐

