0

説明されているテーブル構造は、参考用です。列名は、DB の列名とは異なります。

私はかなり変わったDBを持っています。次の構造のエージェント テーブル ( Agents ) があります。

A_ID(PK)|    AgentName    |    Team
------------------------------------
1       |    Abi          |    New
2       |    Carl         |    New
3       |    James        |    New

いくつかのフィールドを持つ他の2つのテーブルがありますが、問題のテーブルには次のようなフィールドがあります..

表:取引

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 つとして表示したい..計算が相互に依存するため..方法がわかりません..以下は別のクエリです..どうすればそれらを 1 つに結合できますか??

クエリ - 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."));

できればファイルを添付できますが、方法がわかりません。

4

1 に答える 1

0

私はあなたのコードには入りませんでしたが、大まかに3つの選択肢があります:

  • 両方のクエリに同じフィールドがある場合 (明らかにあなたのケースではありません)、UNION クエリを使用して、両方のクエリのデータを 1 つのデータセットに含めることができます。
  • それ以外の場合は、query1 を query2 のソースとして使用できます。
  • 最後に、query1 と query2 を作成し、3 番目のクエリを使用して最初の 2 つを結合できます。
于 2012-10-18T12:29:07.250 に答える