список номеров для условий в sqlite - PullRequest
0 голосов
/ 08 мая 2018

У меня есть таблица, в которой я пытаюсь создать столбец, который будет увеличиваться в зависимости от условий.

В моем примере мне нужно обновить счет отдела, где отдел = Маркетинг. У кого-нибудь есть хороший способ сделать это с помощью SQLite?

Текущая таблица

Name        Department     Department_Count
James       Accounting     NULL
Jennifer    Marketing      NULL
Micheal     Warehouse      NULL
Natalie     Marketing      NULL
Rebecca     Marketing      NULL

Таблица обновлений

Name        Department     Department_Count
James       Accounting     NULL
Jennifer    Marketing      1
Micheal     Warehouse      NULL
Natalie     Marketing      2
Rebecca     Marketing      3

Edit:

В настоящее время я вставляю строки, в которых отдел «Маркетинг», в новую таблицу, а затем я использовал первичный ключ или идентификатор строки, чтобы создать автоинкремент, чтобы я мог нумеровать элементы этих типов.

Это требует от меня создания новой таблицы, которая не самая лучшая, поскольку она занимает столько места, а таблица является избыточной, поскольку у меня уже есть базовые данные в этой исходной таблице.

Я использую python для взаимодействия с моей базой данных, если это помогает в решении этой проблемы.

1 Ответ

0 голосов
/ 09 мая 2018

UPDATE

На самом деле, если подумать об этом, вам может не понадобиться триггер:

 INSERT INTO Table (Department, Department_Count) 
    VALUES (?, (SELECT MAX(IFNULL(Department_Count, 0)+1 FROM Table WHERE Department = ?))

может дать вам то, что вы хотите.

Оригинальный ответ

Вы не можете сделать это декларативно, но вы, вероятно, можете выполнить то, что вы хотите, процедурно, используя триггер .

Две возможные стратегии:

  1. Используйте триггер AFTER INSERT, чтобы выполнить инструкцию UPDATE для последней вставленной строки (ROWID будет доступен после INSERT), чтобы задать для столбца Departement_Count выражение SELECT на основе текущих данных в таблице.

  2. Используйте триггер INSTEAD OF для выполнения альтернативной INSERT, комбинируя значения из курсора NEW с аналогичным оператором SELECT, чтобы получить максимальное значение (плюс 1) из столбца Department_Count.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...