連續的值被捕獲這樣如何使逗號在SQL Server中的新表分隔數據爲各行
Item type Item name
1,2,3, abc, def, ghi,
我的目標是在新表中插入的每個值,如下面的
Item type Item name
1 abc
2 def
3 ghi
這是我現在可以捕獲信息的唯一方法,所以任何幫助將不勝感激。請注意,我不是發展者。 感謝
連續的值被捕獲這樣如何使逗號在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 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
我無法規範化數據庫,因爲這是通過共享點捕獲的,不幸的是,這是我可以在同一列下看到多個值的唯一方法 – user2363530 2013-05-13 14:10:48
因此,我在哪裏提供表名和列名Devart? – user2363530 2013-05-13 15:32:53
請嘗試更新的答案。 – Devart 2013-05-13 16:28:23
可能重複http://stackoverflow.com/q/6838353/ 27535(已更新) – gbn 2013-05-13 13:57:10
@gbn m魚是光榮的。我必須避開我的眼睛。 – Yatrix 2013-05-13 13:59:58
不要在一列中存儲逗號分隔值。你應該認真考慮重新設計數據模型。 – 2013-05-13 14:00:05