将逗号分隔列值转换为行

mhn*_*mhn 27 sql sql-server delimiter

我有一个表 样本,数据存储如下

Id   | String
--------------
1     abc,def,ghi
2     jkl,mno,pqr
Run Code Online (Sandbox Code Playgroud)

我需要像...那样的输出

Id   | processedrows
--------------
1     abc
1     def
1     ghi
2     jkl
2     mno
2     pqr
Run Code Online (Sandbox Code Playgroud)

如何在SQL Server中使用select查询执行相同的操作?

SRI*_*RAM 50

试试这个

 SELECT A.[id],  
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT [id],  
         CAST ('<M>' + REPLACE([string], ',', '</M><M>') + '</M>' AS XML) AS String  
     FROM  TableA) AS A CROSS APPLY String.nodes ('/M') AS Split(a); 
Run Code Online (Sandbox Code Playgroud)

请参考这里

http://www.sqljason.com/2010/05/converting-single-comma-separated-row.html

  • 很好的答案,但对于特殊字符或多语言需要将Split.a.value('.','VARCHAR(100)')更改为Split.a.value('.','NVARCHAR(100)') (2认同)