"反规范化"带有1个csv列的sql行

时间:2017-11-29 09:55:41

标签: sql-server tsql split

我有一张像这样的东西。

     Column1                              Column2

     Salade, Tomato,                       FOOD
     Earth, Water, Fire                   Element

我想要一个看起来像这样的视图。

   Column1                Column2
  Salade                   FOOD
  Tomato                   FOOD
  Earth                    Element
  Water                    ELEMENT

目前,我已经使用游标进行了工作,该游标循环使用此表。 插入另一个表格......

没有光标,这是否可行? 在1个select语句中,不创建另一个表。

1 个答案:

答案 0 :(得分:1)

我想使用XML节点方法来拆分逗号分隔数据

SELECT LTRIM(a.value('.', 'nvarchar(max)')) Column1, Column2
FROM
(
    SELECT CAST('<m>'+REPLACE([Column1], ',', '</m><m>')+'</m>' AS XML) AS [Column1],
           [Column2] FROM <table>
) m CROSS APPLY Column1.nodes('/m') AS split(a); 

结果:

Column1 Column2
Salade  FOOD
Tomato  FOOD
Earth   Element
Water   Element
Fire    Element