2014-10-10 205 views
4

我的表格有三列。其中一列[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

回答

17
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

相關問題