在Sql Server中将列中的逗号分隔值拆分为多行

问题描述:

我的表格有三列。其中一列[Col3]有多个值。所以,当我做出一个选择命令在桌子上:在Sql Server中将列中的逗号分隔值拆分为多行

Select col1, col2, col3 from MyTable 

它给了我下面的结果:

  Col1  Col2   Col3 
     ------------------------------ 
Row 1 430  A319   N1160 N1336 
Row 2 abc  efg   G3489 M5678 N5643 

如果有什么办法让输出为:

  Col1  Col2   Col3 
     ------------------------------ 
Row 1 430  A319   N1160 
Row 2 430  A319   N1336 
Row 3 abc  efg   G3489 
Row 4 abc  efg   M5678 
Row 5 abc  efg   N5643 

就像该列有多个值一样,则会显示与该列中每个值相对应的新行,而其他列应包含重复的数据。

我希望我对问题非常清楚。

+1

所以你想要显示'430 A319'如果它是空的? – 2014-10-10 06:26:25

+0

然后NULL将显示在那些列中 – Lokesh 2014-10-10 06:30:38

+0

看来你误解了Ganesh_Devlekar。你怎么知道你想在第二行显示col1的430?对于col1中的NULL总是430,对于col2中的NULL总是A319? – 2014-10-10 06:33:45

SELECT col1, 
     col2, 
     Split.a.value('.', 'VARCHAR(100)') col3 
FROM (SELECT col1, 
       col2, 
       Cast ('<M>' + Replace(col3, ' ', '</M><M>') + '</M>' AS XML) AS Data 
     FROM [table]) AS A 
     CROSS APPLY Data.nodes ('/M') AS Split(a) 
+0

像魅力一样工作。非常感谢。 – Lokesh 2014-10-10 06:55:11

+0

还有一件事,你可以添加一个解释如何上面的代码工作或任何链接,我可以得到的信息。 – Lokesh 2014-10-10 06:56:25

+2

@Lokesh这应该对你有帮助.. http://oops-solution.blogspot.in/2011/10/sql-serverhow-to-split-comma-delimited.html – 2014-10-10 07:00:37