如何在SQL中通过条件分隔符将一列拆分为多列?
How to split a column into multiple columns by condition delimeter in SQL?
有人能帮帮我吗?
我有这个专栏
列<br/>
John > Doe Doe > 作家<br/>
Jane > Doe > 化学工程师 > Sovena<br/>
我希望我的最终结果是
列<br/>
约翰<br/>
简<br/>
第 2 列<br/>
小母狗<br/>
母鹿<br/>
第 3 列<br/>
作家<br/>
化学工程师<br/>
第 4 列<br/>
(空)<br/>
索维纳<br/>
我在 SQL 中需要这个,用“>”分隔,你能帮忙吗?
谢谢!
这回答了问题的原始版本。
遗憾的是,内置的字符串拆分功能没有为组件提供索引。因此,一种解决方案是递归子查询:
with cte as (
select id, convert(varchar(max), NULL) as str,
convert(varchar(max), str) as rest, 0 as lev
from t
union all
select id, left(rest, charindex(' > ', rest + ' > ') - 1),
stuff(rest, 1, charindex(' > ', rest + ' > ') + 2, ''),
lev + 1
from cte
where rest <> ''
)
select max(case when lev = 1 then str end),
max(case when lev = 2 then str end),
max(case when lev = 3 then str end),
max(case when lev = 4 then str end)
from cte
group by id;
Here 是一个 db<>fiddle.
有人能帮帮我吗?
我有这个专栏
列<br/>
John > Doe Doe > 作家<br/>
Jane > Doe > 化学工程师 > Sovena<br/>
我希望我的最终结果是
列<br/>
约翰<br/>
简<br/>
第 2 列<br/>
小母狗<br/>
母鹿<br/>
第 3 列<br/>
作家<br/>
化学工程师<br/>
第 4 列<br/>
(空)<br/>
索维纳<br/>
我在 SQL 中需要这个,用“>”分隔,你能帮忙吗? 谢谢!
这回答了问题的原始版本。
遗憾的是,内置的字符串拆分功能没有为组件提供索引。因此,一种解决方案是递归子查询:
with cte as (
select id, convert(varchar(max), NULL) as str,
convert(varchar(max), str) as rest, 0 as lev
from t
union all
select id, left(rest, charindex(' > ', rest + ' > ') - 1),
stuff(rest, 1, charindex(' > ', rest + ' > ') + 2, ''),
lev + 1
from cte
where rest <> ''
)
select max(case when lev = 1 then str end),
max(case when lev = 2 then str end),
max(case when lev = 3 then str end),
max(case when lev = 4 then str end)
from cte
group by id;
Here 是一个 db<>fiddle.