2012-10-18 96 views
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.")); 

可能附加的文件,但我不知道如何..

回答

0

我没有进入你的代码,但大致你有3个选择:

  • 如果两个查询具有相同的字段(显然不是您的情况),则可以使用UNION查询将两个查询的数据都放在一个数据集中。
  • 否则,您可以使用QUERY1作为QUERY2
  • 最后,你可以建立QUERY1和QUERY2的来源,然后用第三个查询加入前2
+0

你好@iDevlop ..我明白你的意思,但问题是查询1和查询2有一个共同的表代理,他们需要从中获得代理ID,这就是我在考虑是否可能有更好的方法来做这件事的原因..但我会给它一个尝试,让你知道如何选项3对我来说.. – PaulFrancis

+0

谢谢,这是我所需要的,它的作品完美..只是更多的推特,我想我会很好去.. – PaulFrancis

+0

很高兴帮助,我没有做太多... –