SQL Server如何将单列逗号分隔编码数据拆分为多行
解决方案
SQL Server 2017原生支持STRING_SPLIT函数,可直接拆分逗号分隔的字符串,结合编码-工时映射规则即可实现需求,修改后的查询代码如下:
SELECT t.Employee_FullName, t.EmpID, TRIM(s.value) AS Code, -- 按业务规则匹配编码对应的工时值 CASE TRIM(s.value) WHEN 'A' THEN t.[Regular Time] WHEN 'B' THEN t.[Double Time] WHEN 'C' THEN t.Overtime -- 多编码对应同一工时类型可在此添加分支,返回相同值即可 END AS Hours FROM myTable t CROSS APPLY STRING_SPLIT(t.Code, ',') s -- 可选:过滤工时为0的无效行 WHERE CASE TRIM(s.value) WHEN 'A' THEN t.[Regular Time] WHEN 'B' THEN t.[Double Time] WHEN 'C' THEN t.Overtime END > 0
逻辑说明
STRING_SPLIT(t.Code, ',')将原表中逗号分隔的Code字段拆分为独立行,每个编码对应单独一行TRIM()处理拆分后编码前后的空格,兼容A,B、A, B等多种分隔格式- CASE语句可灵活配置编码与工时字段的映射关系,支持多编码对应同一工时的需求
- 末尾WHERE条件可按需保留,用于过滤工时为0的无效数据
你提供的示例数据执行上述查询后,输出结果与你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者Gabriella C.
相关产品推荐
相关产品推荐

