STRING_SPLIT()
не вариант, потому что (как указано , упомянутое в документации ), выходные строки могут быть в любом порядке , а порядок не гарантируется соответствует порядку подстрок во входной строке .
Но вы можете попробовать использовать подход, основанный на JSON, используя OPEN JSON () и преобразование строки (значения через запятую преобразуются в действительный массив JSON - London,New York,Paris,Berlin,Madrid
в ["London","New York","Paris","Berlin","Madrid"]
). Результатом OPENJSON()
со схемой по умолчанию является таблица со столбцами key
, value
и type
, а столбец key
представляет собой индекс на основе 0 для каждого элемента в этом массиве:
Таблица:
CREATE TABLE Data (
ID int,
City varchar(1000),
Sales varchar(1000)
)
INSERT INTO Data
(ID, City, Sales)
VALUES
(1, 'London,New York,Paris,Berlin,Madrid', '20,30,,50'),
(2, 'Istanbul,Tokyo,Brussels', '4,5,6')
Заявление:
SELECT d.ID, a.City, a.Sales
FROM Data d
CROSS APPLY (
SELECT c.[value] AS City, s.[value] AS Sales
FROM OPENJSON(CONCAT('["', REPLACE(d.City, ',', '","'), '"]')) c
LEFT OUTER JOIN OPENJSON(CONCAT('["', REPLACE(d.Sales, ',', '","'), '"]')) s
ON c.[key] = s.[key]
) a
Результат:
ID City Sales
1 London 20
1 New York 30
1 Paris
1 Berlin 50
1 Madrid NULL
2 Istanbul 4
2 Tokyo 5
2 Brussels 6