将表的行扩展/拆分为更多行

时间:2017-11-03 13:01:12

标签: sql sql-server tsql sql-server-2012

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

例如,这是我的表格:

enter image description here

而且,这就是表值函数将返回的内容:

enter image description here

我已经阅读了这篇文章,但它seems不必要地复杂了。

2 个答案:

答案 0 :(得分:3)

但是,如果不使用Function您可以使用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);

答案 1 :(得分:2)

如果性能很重要,那么最快的T-SQL&#34;分离器&#34;对于varchar(8000)/ nvarchar(4000)将是DelimitedSplit8K_LEAD by Eirikur Eiriksson。链接到文章末尾的功能。

示例

-- 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