Хотите обновить таблицу в MS Access, чтобы добавить столбец и заполнить на основе другого столбца - PullRequest
1 голос
/ 07 марта 2019

У меня есть доступ к таблице (Fruit) в форме
Fruit, Cost, и я хочу обновить таблицу так, чтобы у меня была скобка Fruit, Cost, Cost
, а скобка стоимости будетоснованный на стоимости, например, Стоимость = .89 - Скобка затрат = '<1доллар', Стоимость = 2-Скобка затрат = '1-5долларов' и т. д. </p>

Пока у меня есть:

        Alter Table [Fruit]
        Add  [Cost Bracket] Varchar(50) 
       Update [Cost Bracket]
        Set [Cost Bracket] = Switch(Cost<1,'<1 dollar',Cost Between 1 and 
        5,'1-  5 dollars' etc...)

1 Ответ

0 голосов
/ 08 марта 2019

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

Например, если предположить, что ваша таблица Fruit выглядит примерно так:

enter image description here

+----+-----------+-------+
| ID |   fruit   | cost  |
+----+-----------+-------+
|  1 | Apple     | £0.50 |
|  2 | Orange    | £0.80 |
|  3 | Pineapple | £3.00 |
|  4 | Grape     | £1.50 |
+----+-----------+-------+

Вы можете создать таблицу Cost Brackets со следующей структурой:

enter image description here

И заполните его следующими данными в скобках:

enter image description here

+----+--------+--------+-------------+
| ID | lbound | ubound | description |
+----+--------+--------+-------------+
|  1 | £0.00  | £1.00  | < £1        |
|  2 | £1.01  | £2.00  | < £2        |
|  3 | £2.01  | £5.00  | < £5        |
+----+--------+--------+-------------+

Затем вы можете связать их, используя запрос, такой как:

select f.*, c.description
from fruit f left join cost_brackets c on (f.cost between c.lbound and c.ubound)

Дает следующий результат для приведенных выше образцов данных:

enter image description here

+----+-----------+-------+-------------+
| ID |   fruit   | cost  | description |
+----+-----------+-------+-------------+
|  1 | Apple     | £0.50 | < £1        |
|  2 | Orange    | £0.80 | < £1        |
|  3 | Pineapple | £3.00 | < £5        |
|  4 | Grape     | £1.50 | < £2        |
+----+-----------+-------+-------------+

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

Принимая во внимание, что при вашем текущем подходе любое изменение в скобках стоимости будет включать:

  • Изменение жестко закодированных скобок стоимости, найденных в функциях Switch, используемых в каждом запросе (и надеюсь, что вы охватили их все).
  • Обновите значения, содержащиеся в каждой таблице, которая содержит описание скобок затрат, и надеемся, что значение, отображаемое в таблице, было соответствующим образом обновлено и отражает текущие скобки затрат.

* Кажется, что это должна быть разовая задача и часть вашей базы данных, а не операция, выполняемая кодом (если, возможно, вы не генерируете таблицу на лету ?)

...