Sql server 如何在sql server中将逗号分隔的数据转换为新表中的各行

Sql server 如何在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 这是我现在唯一能获取信息的方法,因此,任何帮助都将不胜感激。请注意,我不是开发人员。 谢谢试试这个- 查询: DECLARE @table TABLE ( a

一行中的值是这样捕获的

Item type    Item name 
1,2,3,        abc, def, ghi,
我的目标是在一个新表中插入每个值,如下所示

Item type    Item name
1            abc
2            def
3            ghi
这是我现在唯一能获取信息的方法,因此,任何帮助都将不胜感激。请注意,我不是开发人员。 谢谢

试试这个-

查询:

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
试试这个-

查询:

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

可能是@gbn的复制品,乌鱼是光荣的。我必须转移视线。不要在一列中存储逗号分隔的值。你应该认真考虑重新设计数据模型。既然你说你不是一个退化者:你能使用SSMS吗?你喜欢基于excel的答案吗?可能是@gbn(更新)的重复,乌鱼是光荣的。我必须转移视线。不要在一列中存储逗号分隔的值。你应该认真考虑重新设计数据模型。既然你说你不是一个退化者:你能使用SSMS吗?您喜欢基于excel的答案吗?我无法规范化数据库,因为这是通过sharepoint捕获的,不幸的是,这是我可以在同一列下看到多个值的唯一方法。因此,我在何处提供表名和列名Devart?请尝试更新的答案。谢谢Devart,您的解决方案非常有用。我无法规范化数据库,因为这是通过sharepoint捕获的,不幸的是,这是我可以在同一列下看到多个值的唯一方法。因此,我在何处提供表名和列名Devart?请尝试更新的答案。谢谢Devart,您的解决方案非常有用。