Разбить строку (с переменным номером значения) на разные столбцы - PullRequest
0 голосов
/ 02 октября 2018

Я хотел бы разбить строку с переменным числом значений на разные столбцы.

Я знаю, что существует решение 'PIVOT', но я не уверен, что это будет работать, когда число значенийэто не то же самое.

Вот пример:

+-----+-----------+
| Key |   Value   |
+-----+-----------+
|   1 | A,B,C     |
|   2 | A,B,C,D   |
|   3 | A,B,C,D,E |
+-----+-----------+

Результат:

+-----+------+------+------+------+------+
| Key | Col1 | Col2 | Col3 | Col4 | Col5 |
+-----+------+------+------+------+------+
|   1 | A    | B    | C    |      |      |
|   2 | A    | B    | C    | D    |      |
|   3 | A    | B    | C    | D    | E    |
+-----+------+------+------+------+------+

Я знаю, что есть по крайней мере 1 значение и максимум 5 значений встрока, поэтому я должен сгенерировать 5 столбцов и заполнить ее соответственно.

1 Ответ

0 голосов
/ 02 октября 2018

Используйте немного запросов XML:

DECLARE @mockup TABLE (
    [key] INT
    ,[value] VARCHAR(max)
    );

INSERT INTO @mockup
VALUES 
 (1,'A,B,C')
,(2,'A,B,C,D')
,(3,'A,B,C,D,E')

;WITH Splitted
AS (
    SELECT [key]
        ,[value]
        ,CAST('<x>' + REPLACE([value], ',', '</x><x>') + '</x>' AS XML) AS Parts
    FROM @mockup
    )
SELECT [key]
    ,Parts.value(N'/x[1]', 'varchar(max)') AS Col_1
    ,Parts.value(N'/x[2]', 'varchar(max)') AS Col_2
    ,Parts.value(N'/x[3]', 'varchar(max)') AS Col_3
    ,Parts.value(N'/x[4]', 'varchar(max)') AS Col_4
    ,Parts.value(N'/x[5]', 'varchar(max)') AS Col_5
FROM Splitted;

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...