此前有人問起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。將相關數據存儲在一起至少可以大大簡化這些問題。無論你如何切片,跳過「相關」列是非常不方便的。 –