Динамическое добавление столбцов не является хорошим дизайном. Вы можете добавить их, используя
ALTER TABLE your_table ADD COLUMN the_column_name TEXT
- столбец для существующих строк будет заполнен нулями, хотя вы можете указать значение DEFAULT, и тогда существующие строки будут заполнены этим значением.
например. следующее демонстрирует вышесказанное: -
DROP TABLE IF EXISTS soldv1;
CREATE TABLE IF NOT EXISTS soldv1 (timestamp INTEGER PRIAMRY KEY, items_sold_x INTEGER);
INSERT INTO soldv1 VALUES(1,10),(4,40),(7,20);
SELECT * FROM soldv1 ORDER BY timestamp;
ALTER TABLE soldv1 ADD COLUMN items_sold_y INTEGER;
UPDATE soldv1 SET items_sold_y = 5 WHERE timestamp = 1;
INSERT INTO soldv1 VALUES(2,null,10),(5,null,3);
SELECT * FROM soldv1 ORDER BY timestamp;
, в результате чего первый запрос возвращает: -
* +1012 *
и второй запрос возвращает: -
![enter image description here](https://i.stack.imgur.com/VeySo.png)
Однако, как уже говорилось, вышеприведенное не считается хорошим дизайном, поскольку схема является динамической.
Вы можете поочередно управлять эквивалентом вышеупомянутого с добавлением нового столбца (который также должен быть частью первичного ключа) или добавлением / добавлением суффикса времени к типу.
Рассмотрим в качестве примера следующее: -
DROP TABLE IF EXISTS soldv2;
CREATE TABLE IF NOT EXISTS soldv2 (type TEXT, timestamp INTEGER, items_sold INTEGER, PRIMARY KEY(timestamp,type));
INSERT INTO soldv2 VALUES('x',1,10),('x',4,40),('x',7,20);
INSERT INTO soldv2 VALUES('y',1,5),('y',2,10),('y',5,3);
INSERT INTO soldv2 VALUES('z',1,15),('z',2,5),('z',9,25);
SELECT * FROM soldv2 ORDER BY timestamp;
Это реплицировало исходные данные с учетом данных и дополнительно добавляло другой тип (столбец items_sold_z) без необходимости изменять схему таблицы (и при этом не возникало дополнительных сложностей, связанных с необходимостью обновления, а не вставки, как при применении отметка времени 1 items_sold_y 5) .
Результат запроса: -
![enter image description here](https://i.stack.imgur.com/cY7Lv.png)
Или sqlite не тот инструмент вообще? И мне лучше использовать CSV или Excel?
SQLite является допустимым инструментом. То, что вы затем делаете с данными, может быть выполнено так же просто, как в Excel (возможно, проще) и, возможно, намного проще, чем попытка обработки данных в формате CSV.
Например, скажем, вы хотели, чтобы общее количество проданных товаров за метку времени и сколько типов было продано тогда: -
SELECT timestamp, count(items_sold) AS number_of_item_types_sold, sum(items_sold) AS total_sold FROM soldv2 GROUP by timestamp ORDER BY timestamp;
приведет к: -