sql从列值多行

时间:2012-12-11 09:56:04

标签: sql sql-server-2008 tsql

我有一个表,其中一列有逗号分隔值,我想要在行中..

col1
3,4,5
5,6,6

返回结果应为

col1
3
4
5
5
6
6

3 个答案:

答案 0 :(得分:2)

    declare @tbl table(data nvarchar(100))
    insert into @tbl values('1,2,3')
    insert into @tbl values('4,5,6')
    insert into @tbl values('7,8,9')

     SELECT   
     Split.a.value('.', 'VARCHAR(100)') AS String  
     FROM  (SELECT data,  
         CAST ('<M>' + REPLACE(data, ',', '</M><M>') + '</M>' AS XML) AS String  
     FROM  @tbl) AS A CROSS APPLY String.nodes ('/M') AS Split(a);  

答案 1 :(得分:0)

我相信下面解释了如何循环逗号分隔值。您可以将它们插入另一个变量中以获得所需的输出。

Splitting of comma separated values

答案 2 :(得分:0)

您可以使用递归查询来执行此拆分:

;with cte (item, list) as
(
  select 
    cast(left(col1, charindex(',',col1+',')-1) as varchar(50)) item,
         stuff(col1, 1, charindex(',',col1+','), '') list
  from yourtable
  union all
  select 
    cast(left(list, charindex(',',list+',')-1) as varchar(50)) item,
    stuff(list, 1, charindex(',',list+','), '') list
  from cte
  where list > ''
) 
select item
from cte

请参阅SQL Fiddle with Demo