Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将单行拆分为多行_Sql_Sql Server - Fatal编程技术网

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错误。