Изменить новую строку на новую запись - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть запись, показанная ниже:

enter image description here

Возможно ли включить эту запись на SQL Server 2008 R2 в таблицу ниже?

enter image description here

Изображение 1 Тип SiteName - Varchar, а распределение - также Varchar. Каждое значение имеет новую строку, я имею в виду, что новая строка - это char (13). значение может быть «(0,0–12,0)» + CHAR (13) + «(15,0–18,0)» и т. д.

Изображение 2 этот символ (13) является ссылкой для разбиения каждой строки на новую строка при распределении полей, и каждая строка будет наследовать свой SiteName

Новая отформатированная таблица будет выгружаться в новую таблицу (pi c .2), поэтому исходные данные (pi c .1) просто для справки.

Я застрял, чтобы сделать это на SQL Server 2008, любые предложения будут очень признательны.

1 Ответ

2 голосов
/ 07 апреля 2020

Вам нужно разделить данные, как в примере ниже (вы можете разделить по разным символам, если 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);
...