2017-12-18 234 views
0

考虑我已经创建dbo.split功能,这样操作的每个值:使用分割功能显示在单独一行

查询:

select substr from dbo.split(',' , 'A,B,C') 

结果:

|Substr| 
-------- 
|A  | 
-------- 
|B  | 
-------- 
|C  | 
-------- 

现在我想使用此功能转换此表格:

|ID|Char| 
--------- 
|1 |A,B | 
--------- 
|2 |A | 
--------- 
|3 |B,C | 
--------- 

这个结果:

|ID|Char| 
--------- 
|1 |A | 
--------- 
|1 |B | 
--------- 
|2 |A | 
--------- 
|3 |B | 
--------- 
|3 |C | 
--------- 
+0

我在想你需要遍历表中的所有记录,并在每一行上使用你的拆分函数,并将拆分结果插入到另一个表中,这将以你想要的形式。 –

+0

你需要添加一些你已经写好的代码 – Sunil

回答

1

试试这个:

这个工作没有Split功能。

DECLARE @Table TABLE(ID INT, [Char] VARCHAR(20)) 
INSERT INTO @Table VALUES(1,'A,B') 
INSERT INTO @Table VALUES(2,'A') 
INSERT INTO @Table VALUES(3,'B,C') 

SELECT A.ID, 
    Split.a.value('.', 'VARCHAR(100)') AS [Char] 
FROM 
(
    SELECT ID, 
     CAST ('<M>' + REPLACE([Char], ',', '</M><M>') + '</M>' AS XML) AS Data 
    FROM @Table 
) AS A CROSS APPLY Data.nodes ('/M') AS Split(a);