Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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_Tsql_Sql Server 2012 - Fatal编程技术网

Sql 将表中的行展开/拆分为更多行

Sql 将表中的行展开/拆分为更多行,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我需要创建一个表值函数,只包含一个col,它将表中的多值数据作为单个值返回 例如,这是我的表格: 这就是表值函数将返回的结果: 我已经读过这篇文章了,但它太复杂了 但是,您可以在不使用函数的情况下实现上述功能,也可以使用XML方法: 如果性能很重要,那么varchar8000/nvarchar4000最快的T-SQL拆分器将是。链接到文章末尾的函数 范例 结果 关于这一点,可能有几百个重复的问题,但我不确定是否有任何答案像下面的3篇文章那样完整,并且可能有重复的答案——尽管在我看来,被接受的答案

我需要创建一个表值函数,只包含一个col,它将表中的多值数据作为单个值返回

例如,这是我的表格:

这就是表值函数将返回的结果:


我已经读过这篇文章了,但它太复杂了

但是,您可以在不使用函数的情况下实现上述功能,也可以使用XML方法:


如果性能很重要,那么varchar8000/nvarchar4000最快的T-SQL拆分器将是。链接到文章末尾的函数

范例

结果


关于这一点,可能有几百个重复的问题,但我不确定是否有任何答案像下面的3篇文章那样完整,并且可能有重复的答案——尽管在我看来,被接受的答案不是最好的方式——我建议阅读精彩的文章!为什么这是区分大小写的?如果您尝试将单词节点或值大写,它将无法编译,为什么?SQL不区分大小写吗?@LearnByReading在SQL Server XQuery语句中区分大小写,因为xml即值方法和节点方法区分大小写
SELECT split.a.value('.', 'VARCHAR(MAX)') [TestCol]
FROM
(
    SELECT CAST('<M>'+REPLACE([TestCol], '#', '</M><M>')+'</M>' AS XML) AS String
    FROM [Table]
) A
CROSS APPLY String.nodes('/M') AS split(a);
-- sample data
declare @table table (someid int identity, somestring varchar(100));
insert @table (somestring) values ('abc#123##xxx'),('ff#rrr#ddd');
-- example
select someid, ItemNumber, Item 
from @table t
cross apply dbo.DelimitedSplit8K_LEAD(t.somestring, '#');
someid      ItemNumber    Item
----------- ------------- -----
1           1             abc
1           2             123
1           3             
1           4             xxx
2           1             ff
2           2             rrr
2           3             ddd