Как объединить строки под текстовым разделителем - PullRequest
0 голосов
/ 08 ноября 2019

У меня плохо отформатированный CSV-файл, который мне нужно очистить.

В этом CSV нет текстовых спецификаторов, поэтому я не могу использовать их для исключения возврата каретки и перевода строки. Кажется, мой единственный вариант - объединять записи вместе, используя предложение STRING_AGG () или подобное, до следующего поля-разделителя в том же столбце. Звучит запутанно, верно?

У меня в основном есть CSV, который выглядит следующим образом:

PRIMARY_IDENTIFIER | OTHER_COLUMNS
         1.abc     |     data
           def     |     NULL
           ghi     |     NULL
         2.abc     |     data2
         defghi    |     NULL
         3.zyx     |     data3
           wvu     |     NULL

Когда мне нужно найти способ объединить строки под каждым текстовым артефактом-разделителем (числовой в начале PRIMARY_IDENTIFIER)поэтому данные будут выглядеть так:

PRIMARY_IDENTIFIER | OTHER_COLUMNS
     1.abcdefghi   |     data
     2.abcdefghi   |     data2
     3.zyxwvu      |     data3

Я не знаю, как бы я реализовал этот вид запроса, где разделитель - это тот же столбец, который разбит. Единственное, что я могу гарантировать, это то, что первые числовые символы различны. Эта проблема усугубляется тем фактом, что я не могу использовать любое предложение ORDER BY, поскольку две строки в столбцах PRIMARY_IDENTIFIER могут быть одинаковыми, что приводит к дополнительным расхождениям, если их выбрасывать из текущего порядка.

У меня не так много T-SQL для этого примера, потому что, честно говоря, я не знаю, с чего начать. У меня есть смутное представление о том, что я могу использовать CTE, чтобы хотя бы определить начало полей, которые мне нужно объединить, но я не знаю, куда идти дальше.

SELECT COUNT(PRIMARY_IDENTIFIER) 
FROM MyTable
WHERE LEFT(PRIMARY_IDENTIFIER,1) LIKE '%[0-9]%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...