想要更新MS Access中的表以添加列并根据其他列进行填充

时间:2019-03-07 19:36:40

标签: sql ms-access switch-statement sql-update alter

我在访问中有一个表格(水果),形式为
水果,成本 我想更新表格,以便 水果,成本,成本等级
则成本等级将基于成本,例如:Cost = .89-成本等级=“ <1美元”,Cost = 2-成本等级=“ 1-5美元”等。

到目前为止,我有:

        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 :(得分:0)

除了修改当前表的结构以包含成本括弧描述*,然后根据Cost字段所具有的值,使用固定值填充此附加字段外,替代方法可能是构造一个单独的字段表格,其中包含了成本范围的上限和下限以及相应的说明。

例如,假设您的水果表的外观类似于:

enter image description here

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

您可以创建具有以下结构的成本括号表:

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        |
+----+-----------+-------+-------------+

这种方法的独特优势在于,如果您随后决定更改成本范围及其相关描述的范围,则只需在一个地方进行更改即可,并且这些值会逐步所有引用“费用分类”表的查询。

鉴于您目前的做法,对成本范围的任何更改都将涉及:

  • 更改在每个查询中使用的Switch函数中找到的硬编码成本括号(并希望您已经涵盖了所有内容)。
  • 更新每个表所包含的值,其中包含成本括弧描述,并希望表中显示的值已适当更新并反映当前的成本括弧。

**这似乎应该是一项一次性任务,并且是数据库设计的一部分,而不是要由代码执行的操作(除非您正在动态生成表?)