将单行拆分为多行

时间:2011-04-12 04:31:00

标签: sql sql-server

  

可能重复:
  query to display a row data as column

我有一行保存数据为1,2,10,4,5,6,7,8,13,16,17,3。 我需要一个查询将它们拆分为序列行。这样1应出现在第1行,2出现在第2行,10出现在第3行................

1 个答案:

答案 0 :(得分:2)

使用replace将逗号分隔的字符串转换为xml。然后,您可以使用cross apply将xml的nodes()作为行,并使用value()函数获取节点值。

declare @Str varchar(100) = '1,2,10,4,5,6,7,8,13,16,17,3'

select 
  r.value('.', 'int') as Val
from (select cast('<r>'+replace(@Str, ',', '</r><r>')+'</r>' as xml)) as x(x)
  cross apply
    x.nodes('r') as r(r)

如果你需要将它用于表而不是变量,你可以看看这里。 How to split repeating string delimated by commas in T-SQL