如何使逗号在SQL Server中的新表分隔数据为各行

如何使逗号在SQL Server中的新表分隔数据为各行

问题描述:

连续的值被捕获这样如何使逗号在SQL Server中的新表分隔数据为各行

Item type Item name 
1,2,3,  abc, def, ghi, 

我的目标是在新表中插入的每个值,如下面的

Item type Item name 
1   abc 
2   def 
3   ghi 

这是我现在可以捕获信息的唯一方法,所以任何帮助将不胜感激。请注意,我不是发展者。 感谢

+1

可能重复http://stackoverflow.com/q/6838353/ 27535(已更新) – gbn 2013-05-13 13:57:10

+0

@gbn m鱼是光荣的。我必须避开我的眼睛。 – Yatrix 2013-05-13 13:59:58

+2

不要在一列中存储逗号分隔值。你应该认真考虑重新设计数据模型。 – 2013-05-13 14:00:05

尝试这一个 -

查询:

DECLARE @table TABLE 
(
     a VARCHAR(200) 
    , b VARCHAR(200) 
) 

INSERT INTO @table(a, b) 
VALUES 
    ('1,2,3,', 'abc, def, ghi,'), 
    ('1,2,3,4,', 'test1, test2, test3, test4,') 

SELECT 
     [Item name] = LTRIM(data.p) 
    , [Item type] = data.r 
FROM (
    SELECT 
      p = p.value('(.)[1]', 'NVARCHAR(50)') 
     , po = p.value('for $i in . return count(../*[. << $i])', 'int') 
     , r = r.value('(.)[1]', 'NVARCHAR(50)') 
     , ro = r.value('for $i in . return count(../*[. << $i])', 'int') 
    FROM (
     SELECT 
       txml = CAST('<r><s>' + REPLACE(SUBSTRING(t.a, 1, LEN(t.a) - 1), ',', '</s>' + '<s>') + '</s></r>' AS XML) 
      , kxml = CAST('<r><s>' + REPLACE(SUBSTRING(t.b, 1, LEN(t.b) - 1), ',', '</s>' + '<s>') + '</s></r>' AS XML) 
     FROM @table t 
    ) d 
    CROSS APPLY kxml.nodes('/r/s') t(p) 
    CROSS APPLY txml.nodes('/r/s') k(r) 
) data 
WHERE data.po = data.ro 

输出:的

Item name Item type 
----------- ---------- 
abc   1 
def   2 
ghi   3 
test1  1 
test2  2 
test3  3 
test4  4 
+0

我无法规范化数据库,因为这是通过共享点捕获的,不幸的是,这是我可以在同一列下看到多个值的唯一方法 – user2363530 2013-05-13 14:10:48

+0

因此,我在哪里提供表名和列名Devart? – user2363530 2013-05-13 15:32:53

+0

请尝试更新的答案。 – Devart 2013-05-13 16:28:23