У меня плохо отформатированный 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]%'