我正在寻找一些关于下面问题的指导。
我有一个有两列OP_ID
和value
的表。
value列是一个字符串,其中有两个分隔符:逗号和行尾的散列。
当前表名为Torque
。
<表类>
OP_ID
价值
tbody><<tr>930823 1, 0.45, 0.5, 0.55,新墨西哥州,# 2,0.25,0.3,0.35,新墨西哥州。# 930824 1, 0.45, 0.5, 0.55,新墨西哥州。# 表类>
这是一个很大的字符串分割和重新聚合问题。下面假设row_number() over order by (select NULL))
返回正确的序号。
这在实践中往往是正确的,但是微软并没有在文档中确认它总是正确的。我应该引用这个:Aaron Bertrand声称这是真的(在这里)。我不喜欢依赖未记录的特性,但是在这种情况下,如果存在重复的值,那么另一种排序方法将会失败。
select t.*, s.value, s2.*
from t cross apply
string_split(t.value, '#') s cross apply
(select max(case when seqnum = 1 then s2.value end) as Tool,
max(case when seqnum = 2 then s2.value end) as R_lower_lim,
max(case when seqnum = 3 then s2.value end) as R_nominal_torque,
max(case when seqnum = 4 then s2.value end) as R_Upper_lim,
max(case when seqnum = 5 then s2.value end) as units
from (select s2.value,
row_number() over (order by (select null)) as seqnum
from string_split(s.value, ',') s2
) s2
) s2
where s.value <> '';
这是一个db<>小提琴