Я знаю, что есть много вопросов о рекурсивных самообъединениях, но они в основном имеют иерархическую структуру данных следующим образом:
ID | Value | Parent id
-----------------------------
Но мне было интересно, есть ли способ сделать это в конкретном случае, который у меня есть, когда у меня не обязательно есть родительский идентификатор. Мои данные будут выглядеть так, когда я начну загружать файл.
ID | Line |
-------------------------
1 | 3,Formula,1,2,3,4,...
2 | *,record,abc,efg,hij,...
3 | ,,1,x,y,z,...
4 | ,,2,q,r,s,...
5 | 3,Formula,5,6,7,8,...
6 | *,record,lmn,opq,rst,...
7 | ,,1,t,u,v,...
8 | ,,2,l,m,n,...
По сути, это CSV-файл, где каждая строка в таблице является строкой в файле. Строки 1 и 5 идентифицируют заголовок объекта, а строки 3, 4, 7 и 8 идентифицируют строки, принадлежащие объекту. Строки заголовка объекта могут иметь только 40 атрибутов, поэтому объект разбит на несколько разделов в файле CSV.
То, что я хотел бы сделать, это взять таблицу, отделить столбец записи # и соединить его с собой несколько раз, чтобы получить что-то вроде этого:
ID | Line |
-------------------------
1 | 3,Formula,1,2,3,4,5,6,7,8,...
2 | *,record,abc,efg,hij,lmn,opq,rst
3 | ,,1,x,y,z,t,u,v,...
4 | ,,2,q,r,s,l,m,n,...
Я знаю, что это возможно, я просто не знаю, с чего начать. Моя первоначальная идея состояла в том, чтобы создать представление, которое разделяет первый и второй столбцы в представлении, и использовать это представление как способ повторного объединения этих двух столбцов. Однако у меня есть некоторые проблемы:
- Я не знаю, сколько разделов будет в файле для одного и того же
объект
- Файл может содержать и другие объекты, поэтому объединение первых двух столбцов будет проблематичным, если у вас есть что-то вроде
ID | Line |
-------------------------
1 | 3,Formula,1,2,3,4,...
2 | *,record,abc,efg,hij,...
3 | ,,1,x,y,z,...
4 | ,,2,q,r,s,...
5 | 3,Formula,5,6,7,8,...
6 | *,record,lmn,opq,rst,...
7 | ,,1,t,u,v,...
8 | ,,2,l,m,n,...
9 | ,4,Data,1,2,3,4,...
10 | *,record,lmn,opq,rst,...
11 | ,,1,t,u,v,...
В приведенном выше случае мой план может объединить строки из объекта Data в строке 9 с первыми строками объекта Formula путем сопоставления значения записи 1.
UPDATE
Я знаю, это несколько сбивает с толку. Я пытался сделать это с C # некоторое время назад, но мне пришлось в основном написать рекурсивный приличный синтаксический анализатор для анализа определенного формата файла, и это заняло много времени, потому что я должен был получить его в базе данных впоследствии, и это было слишком много для структуры лица , Конвертирование одного файла заняло несколько часов, поскольку эти файлы слишком велики.
В любом случае, @Nolan Shang имеет самый близкий результат к тому, что я хочу. Разница лишь в этом (извините за плохое форматирование):
+----+------------+------------------------------------------+-----------------------+
| ID | header | x | value
|
+----+------------+------------------------------------------+-----------------------+
| 1 | 3,Formula, | ,1,2,3,4,5,6,7,8 |3,Formula,1,2,3,4,5,6,7,8 |
| 2 | ,, | ,1,x,y,z,t,u,v | ,1,x,y,z,t,u,v |
| 3 | ,, | ,2,q,r,s,l,m,n | ,2,q,r,s,l,m,n |
| 4 | *,record, | ,abc,efg,hij,lmn,opq,rst |*,record,abc,efg,hij,lmn,opq,rst |
| 5 | ,4, | ,Data,1,2,3,4 |,4,Data,1,2,3,4 |
| 6 | *,record, | ,lmn,opq,rst | ,lmn,opq,rst |
| 7 | ,, | ,1,t,u,v | ,1,t,u,v |
+----+------------+------------------------------------------+-----------------------------------------------+