将新行更改为新记录

问题描述 投票:0回答:1

我的记录如下所示:

enter image description here

是否可以将SQL Server 2008 R2上的此记录转换为下表?

enter image description here

图片1SiteName类型也是Varchar,分配也是Varchar。每个值都有新行,我的意思是新行是char(13)。值可以是'(0.0-12.0)'+ CHAR(13)+'(15.0-18.0)',依此类推。

图片2此char(13)是将每一行拆分为字段分配上的新行的引用,并且每一行都将继承其SiteName

新格式的表将转储到新表(图2)中,因此原始数据(图1)仅供参考。

我很想在SQL Server 2008上执行此操作,任何建议将不胜感激。

sql-server sql-server-2008-r2
1个回答
0
投票

您需要像下面的示例一样拆分数据(如果CHAR(13) + CHAR(10)不是您的新行分隔符,则可以按不同的符号拆分:

DECLARE @DataSource TABLE
(
    [SiteName] NVARCHAR(128)
   ,[Allocation] NVARCHAR(MAX)
);

INSERT INTO @DataSource ([SiteName], [Allocation])
VALUES 
('a', '1
2')
,('b', '3
4
5')
,('c', '6
7');

WITH DataSource ([SiteName], [Allocations]) AS
(
    SELECT [SiteName]
          ,CAST('<a>' + REPLACE([Allocation], CHAR(13) + CHAR(10), '</a><a>') + '</a>' AS XML)
    FROM @DataSource DS
)
SELECT DS.SiteName
      ,LTRIM(RTRIM(T.c.value('.', 'nvarchar(128)')))
FROM DataSource DS
CROSS APPLY  DS.Allocations.nodes('./a') T(c);
© www.soinside.com 2019 - 2024. All rights reserved.