要点:
如何通过将表1字段A到表2字段A和表1字段B匹配到相应字段(B,C,D,E等),输出表2字段X中存储的表1中每行的数据。)在表2中?
这可能是令人作呕的简单所以如果您觉得我过度背景,请随意跳过其中一些内容!
使用案例
我继承了一个Access数据库,该数据库跟踪我公司聘请的承包商员工进行销售的个人销售旅行。我公司为每个承包商的所有员工协商了一个小时费率,用于我们公司的特定销售账户。
我有两个Access表:
1。 SalesTrips 包含承包商员工进行的所有销售旅行实例。
格式(仅限相关字段):
TripID Sales Account Contractor Employee Hours Contracted
1 800 EarthCO Maurice 10
2 800 WindCO Wade 36
3 900 FireCO Don 17
4 800 FireCO Sherry 52
2。合同包含我公司将向承包商员工支付的每个销售帐户的小时费率。
格式(仅限相关字段 - 费率为$ / hr):
Sales Account EarthCO Rate WindCO Rate FireCO Rate
800 20 18 23
900 24 22 26
业务问题:
我的前任手动(阅读:在Excel中)为每次销售旅行计算了必要的付款,但没有证明某些员工由于病假而没有完成所有合同工时(但仍然支付了费用) 。所以,我建立了一个查询,从每个TripID的病假信息和输出的第三个表(SickLeave)中提取“工作小时数”。我们在查询“TrueHours”中将该字段称为“HoursWorked”。
对于每个TripID,我需要将SalesTrips表中的销售帐户和承包商与合同表上的销售帐户和承包商费率(选择正确的字段)相匹配。然后,显然,我需要将“HoursWorked”数量(来自我的查询的输出,并经常根据SickLeave表中的条目更新)乘以正确的支付率(协商,静态,并存储在Contracts表中)。 / p>
示例输出:
我想知道我们需要向EarthCO支付200美元的Maurice和FireCO的雪利酒1,196美元(他们没有病假)。
我认为:
使用SalesTrips表中与Sales Account和Contractor匹配的查找字段。但我不喜欢这个选项,因为我不太喜欢在SalesTrips表中存储速率的想法,并希望限制此表上的查找字段以实现与其他系统的互操作。
在查询中使用IIF语句或DLookup,但我很难将SalesTrips表中字段中的条目(例如“WindCO”)与字段本身匹配(例如“EarthCO Rate”)在合同表上。
我的访问和SQL经验非常有限,我的前任显然也是如此,所以尽管经过了数小时的研究,我仍然相对失去了这一点。这令人沮丧,因为我完全理解这在Excel中是如何工作的,而不是在关系数据库中。我更喜欢查询或类似的选项,并希望避免重组任何一个表,尽管如果有必要,我会对它持开放态度。
作为长期的SO搜索者和第一次发布的海报,我希望你们都能帮忙解决这个问题!
答案 0 :(得分:0)
我会重新考虑您的数据库设计。
Table 1
确定
Table 2
定义包含'数据的字段并不是一个好主意。在字段名称中:它就像在程序的源代码中硬编码客户端名称。
尝试使用更多关系方法,定义3个字段:
Sales Account
Contractor
Rate
Sales Account Contractor Rate
800 EarthCO 20
800 WindCO 18
800 FireCO 23
900 EarthCO 24
900 WindCO 22
900 FireCO 26
这样您就可以使用如下查询构建一个将Table1连接到Table2的查询:
SELECT Table1.Employee, Table2.Rate, Table1.[Hours Contracted],
[Rate]* [Hours Contracted] AS Total
FROM Table1 INNER JOIN Table2
ON (Table1.Contractor = Table2.Contractor) AND (Table1.[Sales Account] = Table2.[Sales Account]);
结果将是(包含您的数据):
Employee Rate Hours Contracted Total
Maurice 20 10 200
Wade 18 36 648
Don 26 17 442
Sherry 23 52 1196
希望这有帮助