У меня есть серия текстовых файлов (по одному в год), которые содержат ответы на ежегодный опрос / вопросник. Заголовки столбцов в файлах относятся к номерам вопросов, и каждая строка представляет ответы одного человека на вопросы, например,
Q1, Q2, Q3, ...
P1A1, P1A2, P1A3, ...
P2A1, P2A2, P2A3, ...
etc.
[where Q1 is Question 1, P1 is Person 1 and A1 is Answer 1].
В вопроснике каждый год используется один и тот же основной набор вопросов, но каждый год также добавляются новые вопросы и удаляются некоторые старые. Поэтому в моих таблицах много общих полей, но они не все одинаковые, например,
Year 1 | Year 2 | Year 3 etc.
Q1, Q2, Q3 | Q1, Q2, Q4 | Q1, Q2, Q5
P1A1, P1A2, P1A3 | P1A1, P1A2, P1A4 | P1A1, P1A2, P1A5
P2A1, P2A2, P2A3 | P2A1, P2A2, P2A4 | P2A1, P2A2, P2A5
В этом примере Q1 и Q2 являются основными вопросами, а вопросы 3, 4 и 5 зависят от года проведения опроса.
Удаленные номера вопросов никогда не используются повторно: если добавляется новый вопрос, ему присваивается совершенно новый номер. В реальных опросах содержится от 300 до 500 вопросов, и каждый год на них отвечают около 40 000 человек.
Я хочу объединить все эти данные в одну таблицу, заголовки столбцов которой будут представлять собой набор различных заголовков в исходных файлах плюс столбец для года. В течение многих лет, когда вопрос не имеет отношения, я хотел бы иметь нулевые значения, например
Year, Q1, Q2, Q3, Q4, Q5
1, P1A1, P1A2, P1A3, Null, Null
1, P2A1, P2A2, P2A3, Null, Null
2, P1A1, P1A2, Null, P1A4, Null
2, P2A1, P2A2, Null, P2A4, Null
3, P1A1, P1A2, Null, Null, P1A5
3, P2A1, P2A2, Null, Null, P2A5
По сути, я просто хочу добавить столбцы там, где они совпадают и в противном случае имеют нулевые значения, но, если возможно, я бы хотел автоматически генерировать набор заголовков столбцов для финальной таблицы (из входных таблиц) в виде числа вопросов в опрос велик, и перспектива разработки и последующего набора Create Table
ужасна! Я полагаю, что мне нужен какой-то вариант UNION ALL
, который не требует от меня указания всех столбцов по порядку и который может обрабатывать несовпадающие столбцы.
У кого-нибудь есть какие-либо советы или предложения, пожалуйста? Изначально я надеялся использовать SQLite, но я готов попробовать практически все. Я не эксперт по базам данных, но у меня есть общее представление о SQL, и я могу немного поработать над сценариями Python, если это поможет.
Если вы сделали это так, спасибо за чтение! Я думал, что это будет очень простая проблема, но удивительно сложно описать подробно.