Sql 将单行拆分为多行
可能重复:Sql 将单行拆分为多行,sql,sql-server,Sql,Sql Server,可能重复: 嗨,我有一个单行保存数据为1,2,10,4,5,6,7,8,13,16,17,3。 我需要一个查询将它们拆分为序列行。使1出现在第一行,2出现在第二行,10出现在第三行………..用于将逗号分隔的字符串转换为xml。然后可以使用获取xml的行数,并使用函数获取节点值 declare @Str varchar(100) = '1,2,10,4,5,6,7,8,13,16,17,3' select r.value('.', 'int') as Val from (select c
嗨,我有一个单行保存数据为1,2,10,4,5,6,7,8,13,16,17,3。 我需要一个查询将它们拆分为序列行。使1出现在第一行,2出现在第二行,10出现在第三行………..用于将逗号分隔的字符串转换为xml。然后可以使用获取xml的行数,并使用函数获取节点值
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)
declare@Str varchar(100)='1,2,10,4,5,6,7,8,13,16,17,3'
挑选
r、 值('.',int')作为Val
从(选择cast(''+replace(@Str','','')+''作为xml))转换为x(x)
交叉应用
x、 节点('r')作为r(r)
如果需要将其用于表而不是变量,可以在此处查看 哈哈,现在你明白为什么规范化数据是件好事了吧?;-)我不认为有一个内在的方式做这件事。行是列是关系数据库中两个非常不同的概念,如果您需要在它们之间进行转换,那么您的设计就有问题。3个问题似乎都以不同的方式提出了相同的问题。您为什么不编辑一份原件,并发布一个适当的问题(可能包含更多细节)?您可能还需要将
&
替换为&如果在不同的数据集上使用此技术,请在源列中编写>以避免XML错误。