0
请随身携带,因为这是一个有点复杂的解释,我会尽我所能解释它尽可能简单..表结构描述仅供参考,列名是不同的与DB相比。多个JOIN查询-MS Access
我有一个不寻常的数据库。我有代理人表与以下结构(代理)..
A_ID(PK)| AgentName | Team
------------------------------------
1 | Abi | New
2 | Carl | New
3 | James | New
我有具有若干字段,但所讨论的那些有像..
表字段其他两个表:交易
ID(PK) | manyColumns | Agent_ID | OUTCOME
--------------------------------------------------------
96 | ... | 1 | 9
98 | .... | 2 | 8
99 | ..... | 3 | 1
表:RAWDATA
ID(PK) | manyColumns | Agent_ID | BANK_OUTCOME
-------------------------------------------------------------
1234 | ... | 1 | 3
1114 | .... | 2 | 333
1745 | ..... | 3 | 123
我与员工的工作时间的详细信息的日志表..
表:AGENT_ATTENDANCE
ATT_ID | Hours Worked | Agent_ID_FK
-------------------------------------------
96 | 7.5 | 1
98 | 7.5 | 2
99 | 7.5 | 3
我也有工作人员薪酬的细节,合同小时..
表:AGENT_DETAILS
DT_ID | Hours WK | Pay | Agent_ID_FK
-------------------------------------------------------
96 | 37.5 | 15600 | 1
98 | 37.5 | 15600 | 2
99 | 37.5 | 15600 | 3
我创建了单独的查询,但我想显示为一个..由于计算相互依赖..我不知道如何做到这一点..以下是单独的查询..我怎样才能加入一个??
查询 - 1:
PARAMETERS [EnterStartDate:] DateTime, [EnterEndDate:] DateTime;
SELECT Agents.[Agent Name],
Sum(IIf((([TRANSACTIONS].[BankOutcome]=3) Or ([TRANSACTIONS].[BankOutcome]=333)),1,0)) AS PositiveOutcome,
Count(RAWDATA.Outcome) AS TotalRecordsUsed
FROM (RAWDATA LEFT JOIN Agents ON RAWDATA.[AGENT_ID] = Agents.A_ID) LEFT JOIN
TRANSACTIONS ON RAWDATA.ID = TRANSACTIONS.RAW_ID
WHERE (((RAWDATA.DialedDate) Between [EnterStartDate:] And [EnterEndDate:]))
GROUP BY Agents.[Agent Name], RAWDATA.AGENT_ID
HAVING (((RAWDATA.AGENT_ID) Is Not Null));
查询 - 2:如果我能
PARAMETERS [EnterStartDate:] DateTime, [EnterEndDate:] DateTime;
SELECT Agents.[Agent Name], AGENT_DETAILS.WK_TARGET_HOURS,
Sum(AGENT_ATTENDENCE.HoursWorked_Day) AS [Actual Hours Worked],
[WK_TARGET_HOURS]-[Actual Hours Worked] AS [Hours Lost], AGENT_DETAILS.SALARY,
Round([SALARY]/252/([WK_TARGET_HOURS]/5),2) AS [Hourly Rate], [Hourly Rate]*[Actual Hours Worked] AS [Staff Cost]
FROM (Agents INNER JOIN AGENT_DETAILS ON Agents.A_ID = AGENT_DETAILS.AGENT_ID_fk)
INNER JOIN AGENT_ATTENDENCE ON Agents.A_ID = AGENT_ATTENDENCE.AGENT_ID_fk
WHERE (((AGENT_ATTENDENCE.WorK_Date) Between [EnterStartDate:] And [EnterEndDate:]))
GROUP BY Agents.[Agent Name], AGENT_DETAILS.WK_TARGET_HOURS, AGENT_DETAILS.SALARY,
Agents.Active, Agents.Team
HAVING (((Agents.Active)=True) AND ((Agents.Team)<>"Manager" And (Agents.Team)<>"Cust. Ser."));
可能附加的文件,但我不知道如何..
你好@iDevlop ..我明白你的意思,但问题是查询1和查询2有一个共同的表代理,他们需要从中获得代理ID,这就是我在考虑是否可能有更好的方法来做这件事的原因..但我会给它一个尝试,让你知道如何选项3对我来说.. – PaulFrancis
谢谢,这是我所需要的,它的作品完美..只是更多的推特,我想我会很好去.. – PaulFrancis
很高兴帮助,我没有做太多... –