这是我第一次发帖提问,所以如果有任何错误,请耐心等待。 我正在尝试使用';'的分隔符拆分数值。使用sql到单独的列,我能够使用下面的代码实现拆分它的一部分,但我想将第3列中的其余部分拆分为单独的列 我有这样一张桌子
ID catalogNumber STEPID1
----------------------------
815326 FBRS415 499023;499027;726203
with tmp(catalognumber,stepid1_split,stepid1) as (
select catalognumber,cast(LEFT(stepid1, CHARINDEX(';',stepid1+';')-1) as varchar),cast(STUFF(stepid1, 1, CHARINDEX(';',stepid1+';'), '') as varchar)
from EXACT_MATCH
union all
select catalognumber, cast(LEFT(stepid1, CHARINDEX(';',stepid1+';')-1) as varchar), cast(STUFF(stepid1, 1, CHARINDEX(';',stepid1+';'), '') as varchar)
from tmp
where stepid1> ''
)
select *
from tmp
ID catalogNumber STEPID1 STEPID2 STEPID3
---------------------------------------------------
815326 FBRS415 499023 499027 726203
答案 0 :(得分:0)
为此,您可以尝试使用enum
.. XML
方法将逗号值拆分为单独的列,请注意这将始终为您提供三列。
您需要添加一些额外的列,以便在定义
时显示逗号分隔值.node()
结果:
select distinct
a.ID,
a.catalogNumber,
c.value('/m[1]', 'varchar(max)') [STEPID1],
c.value('/m[2]', 'varchar(max)') [STEPID2],
c.value('/m[3]', 'varchar(max)') [STEPID3] from
(
select ID , catalogNumber , cast('<m>'+replace(STEPID1, ';', '</m><m>')+'</m>' as xml) [STEPID1] from <table>
) a cross apply STEPID1.nodes ('/m') as STEPID1(c)