2013-03-21 1 views
1

각 지불 기간에 각 직원이 사용한 시간을 추적하는 Access 데이터베이스가 있습니다.Access 2010 - 여러 레코드에 대해 누적 합계를 표시하고 이전 레코드를 삭제하고 각 줄에 새 레코드를 추가하는 쿼리

나는 각 직원에 대한 이전 26 개 급여 기간의 각, 에서 계산 된 날, 시간을 거슬러 보면 전체가 단지 지난 25 개 급여 기간을 위해 무엇인지 볼 수 있도록하는 질의를 필요로한다. 본질적으로, 26 지불 기간 (또는 그 이상) 오래된 레코드는 줄 단위로 무시해야합니다. 저는 5 년 분량의 기록을 가지고 있으며, 불행히도 이들 모두를 보유 할 필요가 있습니다. 각 직원의 26 지불 기간 누계가 무엇인지 알 수있는 것이 중요합니다. 특정 지불 기간. 기본적으로

, 우리는 각 직원에 대한 총 51 기록을 찾고 - 쿼리가 실제로 를 보여줍니다 첫 급여 기간, 그러나, 26 급여 기간 전에이다; 이 누계 그 급여 기간에 일어난 플러스 이전 25

테이블 내용을 기반으로하고있다 : HoursID를
,
, 을 PayPeriodID HoursUsed, 을 PayPeriodID,를 직원 ID PayPeriodEndDate

쿼리 결과 TotalOfHoursUsedLast26PP (이 쿼리에서 다시 계산하는 날짜를 요청)
직원 ID,

쿼리 내가 필요 결과 : (이미 작업),
를 직원 ID 을 PayPeriodID, 을 HoursUsed , [총 사용 시간,이 PP 바로 이전의 25 PP를 기준으로

나는 DSum으로 어지럽게 해왔다. 그러나 그것을 만드는 방법을 알아낼 수 없다.만이 각각의 지불 기간 동안 한 번에 한 명의 직원에 대해 필요한 PP를 계산하여 마지막 26 PP를 계산한다.

명확해야 : 2009 년 또는 그 밖의 26 개 지급 기간 동안이 쿼리를 되돌아보고 실행할 수 있어야합니다. - 338.8
2011 ~

2011-5 :

결과는 같은 있습니다 Line4_HoursUsedThisPP -

Line32_HoursUsedLast26PP = Line32_HoursUsedThisPP + Line31_HoursUsedLast26PP : Excel에서, 한 개인 직원, 우리는 다음과 같다 뭔가를했다 6 - 398.5
2011-7 - 428.7
2011-8 - 4425
2011-9 - 451
2011-10 - 451
2011-11 - 451
2011-12 - 451
2011-13 - 451
2011-14 - 451
2011-15 - 451
2011-16 - 452.4
2011-17 - 453.1
2011-18 - 454.3
2011-19 - 454.3
2011-20 - 455
2011-21 - 456.1
2011-22 - 460.2
2011-23 - 480
2011-24 - 480
2011-25 - 480
2011-26 - 480
2012-01 - 453.2
2012-02 - 381.2
2012-03 - 301.2
2012-04 - 221.2
2012-05 - 141.2
2012-06 - 81.5
2012-07 - 51.3
2012-08 - 37.5
2012-09 - 29
2012-10 - 29
2012-11 - 29
2012-12 - 29
2012-13 - 29
2012-14 - 29
2012-15 - 29
2012-16 - 27.6
2012-17 - 26.9
2012-18 - 25.7
2012-19 - 25.7
2012-20 - 25
2012-21 - 23.9
,536 91,363,210 2012-22 - 19.8
2012-23 - 0

당신이 볼 수 있듯이, 누적 합계 위로 아래로 간다.

이것은 "지난 26 회 지불 기간의 총 시간 찾기"쿼리에 대한 실제 코드입니다. 인증에 관한 내용 등은 주어진 급여 기간에 직원이 여러 인증을받은 시간이있을 수 있기 때문에 발생합니다. 경우

SELECT List_Employees.ID, Sum(Items_Hours_Actually_Taken.HoursActual) AS SumOfHoursActual 
FROM (List_Pay_Periods INNER JOIN (List_Employees INNER JOIN (Items_Certifications INNER JOIN Items_Hours_Actually_Taken ON Items_Certifications.[CertificationID] = Items_Hours_Actually_Taken.[HoursActualCertificationID]) ON List_Employees.ID = Items_Certifications.[CertificationEmployeeID]) ON List_Pay_Periods.[PayPeriodID] = Items_Hours_Actually_Taken.[HoursActualPayPeriod]) INNER JOIN Last_26_PP_From_Today ON List_Pay_Periods.PayPeriodID = Last_26_PP_From_Today.PayPeriodID 
GROUP BY List_Employees.ID; 

는이 쿼리는 Last_26_PP_From_Today라는 별도의 쿼리에 따라, 분명하지 않다 :

SELECT List_Pay_Periods.PayPeriodID, List_Pay_Periods.PPEnd 
FROM List_Pay_Periods 
WHERE (((List_Pay_Periods.PPEnd)<Date() And (List_Pay_Periods.PPEnd)>(Date()-14))); 

나는 또한 어떤 특정 날짜의 마지막 26 개 급여 기간을 찾을 전환 쿼리를 가지고 : 나는 아마도 여기 누군가가 뭔가를 제공 할 수있는 결정했을 때

PARAMETERS [Date] DateTime; 
SELECT List_Pay_Periods.PayPeriodID, List_Pay_Periods.PPEnd 
FROM List_Pay_Periods 
WHERE (((List_Pay_Periods.PPEnd)<[Date] And (List_Pay_Periods.PPEnd)>([Date]-14))); 

나는 절망의 생각 무차별 방법이었다 테이블 만들기 쿼리의 계단식 시리즈를 포함 청소부.

SELECT hbep1.Employee, hbep1.PP 

(

SELECT Sum(hbep2.Hours) 
     FROM Hours_By_Employee_Per_PP AS hbep2 
     WHERE hbep2.Employee=hbep1.Employee 
      AND (hbep2.PP Between hbep1.[PP]-25 And hbep1.[PP]) 

    ) AS SumLast26 

FROM Hours_By_Employee_Per_PP AS hbep1; 

나를 가져옵니다 :

Employee SumLast26 
2   12 
2   12 
2   12 
2   18 
2   91 
3   4 
3   8 
3   88 
3   168 
3   180 
5   15 
5   15 
5   15 
7   43 
7   61 
7   75 
7   97 
7   106 
7   121 
9   19 
9   0 
+0

re : 유료 기간 번호가 표시되지 않음 - 첫 번째 줄에'hbep1.PP' 다음에 쉼표가 누락 된 것처럼 보입니다. –

+0

당신은 남자들 사이에 꽤 많은 신이 있습니다. 정말 고맙습니다! – Sarah

+0

반갑습니다. 나는 "왕자"로 정착 했었지만 똑같은 고마워. :) –

답변

0

내가 지불 기간 번호가 표시되지 않는 고드에

업데이트

덕분에, 지금을 제외하고 작동 모든 것을 가지고 이 점이 올바른 방향으로 당신을 안내하기를 바랍니다 :

저는 각 개별 Pay_Period의 각 직원에 대한 총 시간이있는 [Hours_by_Empl_PP]라는 테이블로 시작했습니다. 테이블 데이터가 주어진 (직원 + Pay_Period)에 대한 여러 레코드가있는 경우이 값을 총 간단한 집계 쿼리를 만들 수 있습니다

EmployeeID PayPeriodID HoursUsed 
1   1   3 
1   2   7 
1   3   4 
1   4   4 
1   5   5 
1   6   8 
1   7   5 
2   1   1 
2   2   2 
2   3   1 
2   4   0 
2   5   0 
2   6   1 
2   7   2 

...

SELECT EmployeeID, PayPeriodID, SUM(HoursUsedToday) AS HoursUsed 
FROM YourRawData 
GROUP BY EmployeeID, PayPeriodID 

... 을 저장하는을 [Hours_by_Empl_PP]로 사용하고 테이블 대신이를 사용하십시오.

다음 단계는 4 기간 창에 대해 시간 수를 요약하는 쿼리를 만드는 것입니다. (필자는 작업 확인을 쉽게하기 위해 26 대신에 4를 선택했습니다.)이 창에는 현재 Pay_Period와 이전 세 가지가 포함됩니다.

SELECT hbep1.EmployeeID, hbep1.PayPeriodID, 
    (
     SELECT Sum(hbep2.HoursUsed) 
     FROM Hours_by_Empl_PP hbep2 
     WHERE hbep2.EmployeeID=hbep1.EmployeeID 
      AND (hbep2.PayPeriodID Between hbep1.[PayPeriodID]-3 And hbep1.[PayPeriodID]) 
    ) AS Sum_of_Hours_last_4_PPs 
FROM Hours_by_Empl_PP hbep1; 

이 쿼리는 쿼리 PayPeriodID 값이 순차 및 시간 순서에 있다고 가정하는 것이 나에게

EmployeeID PayPeriodID Sum_of_Hours_last_4_PPs 
1   1   3 
1   2   10 
1   3   14 
1   4   18 
1   5   20 
1   6   21 
1   7   22 
2   1   1 
2   2   3 
2   3   4 
2   4   4 
2   5   3 
2   6   2 
2   7   3 

참고를 제공합니다. [PayPeriodEndDate] 값을 사용하여 동일한 결과를 얻을 수는 있지만 다른 JOIN을 의미하므로 가능한 한 명확하게 예제를 유지하려고합니다.

그게 사실입니다. [Hours_by_Empl_4PP_window]와 같은 이름으로 쿼리를 저장하고 다른 테이블 (Employee 이름 등)에 대한 JOIN 쿼리에 사용하여 거기에서 가져올 수 있습니다.

+0

고마워요! 내가 일하기 전까지는 그것을 시도 할 수 없다. 그것이 효과가 있다면 월요일에 알려 드리겠습니다. – Sarah

+0

고마워요! 방금 내 결과를 보여주기 위해 게시물을 업데이트했습니다. 어떤 이유로 든 유료 기간 ID 번호를 표시하지 않는 것을 제외하고는 모든 것이 훌륭하게 작동했습니다. – Sarah

관련 문제