將訂閱號分割為多列
在單列包含多個值(例如訂閱號)的情況下,將這些值拆分分成單獨的欄位可能是一種有用的資料操作技術。這是逐步指南:
1.交叉應用XML 碎片:
此方法利用XML 碎片將訂閱號轉換為XML 文檔,允許將各個值提取為單獨的節點。
Cross Apply ( Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)'))) ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)'))) ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)'))) ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)'))) ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)'))) ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)'))) ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)'))) From (Select Cast('<x>' + replace((Select replace(replace(A.SomeCol,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A ) B
這裡, xDim 是將訂閱號碼字串轉換為 XML 的分段元素。編號為 x[1]、x[2] 等的結果節點將被提取到目標列中。
2。動態建立表:
或者,您可以在查詢執行期間動態建立目標表。這消除了事先明確建立表格的需要。
Select A.PUB_FORM_NUM ,B.* Into MyNewPubTable From @YourTable A Cross Apply ( Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)'))) ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)'))) ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)'))) ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)'))) ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)'))) ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)'))) ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)'))) From (Select Cast('<x>' + replace((Select replace(replace(A.PUB_FORM_NUM,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A ) B
此方法建立 MyNewPubTable 並將拆分訂閱編號值直接插入目標列中。
以上是如何在 SQL 中將多個訂閱號碼的單列分割為單獨的欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!