Sql 通过将表1中字段中的数据与Access中表2中字段中的数据和字段本身进行匹配来输出字段

Sql 通过将表1中字段中的数据与Access中表2中字段中的数据和字段本身进行匹配来输出字段,sql,database,ms-access,vba,Sql,Database,Ms Access,Vba,要点: 如何通过将表1字段A与表2字段A、表1字段B与表2中相应字段(B、C、D、E等)相匹配,为表1中的每一行输出存储在表2字段X中的数据 这可能是令人恶心的简单,所以如果你觉得我的背景太差了,请随意跳过其中一些 用例: 我继承了一个Access数据库,该数据库跟踪我的公司雇佣来进行销售的承包商员工的个人销售行程。我的公司已经为每个承包商的所有员工就我公司的特定销售账户协商了一个小时费率 我有两个访问表: 1。SalesTrips包含承包商员工执行的所有销售差旅实例 格式(仅限相关字段): 2

要点:

如何通过将表1字段A与表2字段A、表1字段B与表2中相应字段(B、C、D、E等)相匹配,为表1中的每一行输出存储在表2字段X中的数据

这可能是令人恶心的简单,所以如果你觉得我的背景太差了,请随意跳过其中一些

用例:

我继承了一个Access数据库,该数据库跟踪我的公司雇佣来进行销售的承包商员工的个人销售行程。我的公司已经为每个承包商的所有员工就我公司的特定销售账户协商了一个小时费率

我有两个访问表:

1。SalesTrips包含承包商员工执行的所有销售差旅实例

格式(仅限相关字段):

2。合同包含我公司将支付给承包商员工的每个销售账户的小时费率

格式(仅相关字段-费率为美元/小时):

业务问题:

我的前任手动(在Excel中)计算了每次销售差旅的必要费用,但没有考虑到一些员工由于病假(但仍有工资)没有完成所有合同工时的证据。因此,我构建了一个查询,从第三个病假信息表(病假)中提取病假信息,并为每个TripID输出一个“工作小时”数量。让我们在查询中将该字段称为“HoursWorked”为“TrueHours”

对于每个TripID,我需要将SalesTrips表中的Sales Account和Contractor与Contracts表中的Sales Account和Contractor rate(选择正确的字段)相匹配。然后,很明显,我需要将“HoursWorked”数量(查询输出,并根据病假表中的条目频繁更新)乘以正确的付款率(协商、静态和存储在Contracts表中)

示例输出:

我想知道我们需要支付EarthCO的莫里斯200美元和FireCO的雪莉1196美元(他们没有病假)

我考虑过:

  • 在SalesTrips表中使用与Sales Account和Contractor匹配的查找字段。但我不喜欢这个选项,因为我不太喜欢将速率存储在SalesTrips表中的想法,并且希望限制此表上的查找字段,以实现与其他系统的互操作性

  • 在查询中使用IIF语句或DLookup,但我一直难以将SalesTrips表中字段(如“WindCO”)中的条目与Contracts表中字段本身(如“EarthCO Rate”)相匹配

  • 我在访问和SQL方面的经验非常有限,我的前任显然也是如此,所以尽管经过了很多小时的研究,我对这一点还是比较迷茫。这是令人沮丧的,因为我完全理解这在Excel中是如何工作的,但在关系数据库中却不行。我更喜欢一个查询或类似的选项,并且希望避免重新构造任何一个表,尽管如果有必要,我愿意接受


    作为一个长期的SO搜索者和第一次发布海报的人,我希望你们能在这方面提供帮助

    我会重新考虑你的数据库设计

    表1
    正常

    表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
    
    因此,您可以使用如下查询构建连接表1和表2的查询:

    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]);
    
    结果将是(连同您的数据):

    希望这有帮助

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