想要在MS Access中更新表以添加列并基于其他列填充

问题描述 投票:1回答:1

我在表单中有一个表(Fruit)访问 水果,成本和我想更新表,以便我将有水果,成本,成本支架 成本等级将基于成本,例如成本= .89 - 成本支架='<1美元',成本= 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...)
sql ms-access switch-statement sql-update alter
1个回答
0
投票

而不是修改当前表的结构以包含成本约束描述*,然后使用取决于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        |
+----+-----------+-------+-------------+

此方法具有明显的优势,如果您随后决定更改成本括号及其相关描述的范围,则只需在一个位置进行更改,并且值将在引​​用“成本括号”表的所有查询中级联。

鉴于您目前的方法,对费用括号的任何更改都将涉及:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.