此前有人问起Turning a Comma Separated string into individual rows。这对于一列很适用,但我有一个扩展问题。如果我想分割两个(或更多)相关列,该怎么办?也就是说,如果我有这样的数据(使用数据从以前的文章为基础):谈到相关逗号分隔字符串到各行多列
| SomeID | OtherID | Data | RelatedData |
+----------------+-------------+-----------+-------------+
| abcdef-..... | cdef123-... | 18,20,22 | xxx,,yyy |
| abcdef-..... | 4554a24-... | 17,19 | a,bb |
| 987654-..... | 12324a2-... | 13,19,20 | r,s,t |
而且想返回像行如下:
| SomeID | OtherID | Data | RelatedData |
+----------------+-------------+------+-------------+
| abcdef-..... | cdef123-... | 18 | xxx |
| abcdef-..... | cdef123-... | 20 | |
| abcdef-..... | cdef123-... | 22 | yyy |
| abcdef-..... | 4554a24-... | 17 | a |
| abcdef-..... | 4554a24-... | 19 | bb |
| ... | ... | ... | ... |
我希望能使用STRING_SPLIT由于其简单,但我找不到一种方法使其工作。这是行不通的:
select OtherID, cs1.Value, cs2.Value
from yourtable
cross apply STRING_SPLIT (Data, ',') cs1
cross apply STRING_SPLIT (RelatedData, ',') cs2
有什么建议吗?
'ROW_NUMBER()','JOIN',然后'CROSS APPLY'。 –
重新设计数据库的时间 - 这是真正的答案。 –
或者,如果无法说服人们规范化数据,请考虑使用JSON。将相关数据存储在一起至少可以大大简化这些问题。无论你如何切片,跳过“相关”列是非常不方便的。 –