2013-07-10 3 views
0

두 개의 테이블이 있습니다. 현재 Access 2010에 있지만 Microsoft SQL 2010 DBMS로 마이그레이션됩니다. 하나는 EmployeeWages, 다른 하나는 TimeClock입니다. EmployeeWages는 직원 ID, 임금 및 유효 날짜로 구성됩니다. TimeClock 테이블에는 직원 ID, 직원과 관련된 임금 및 임금이 유효한 날짜가 있습니다.다른 테이블의 두 날짜 사이의 데이터 포인트가있는 테이블의 항목 일치

내가해야 할 일은 정확한 임금을 직원이 근무한 항목에 맞추는 것입니다. 현재 테이블에는 TimeIn 및 TimeOut 필드가 있습니다. 이 질문에 대한 간결함을 위해 이미 근무 시간을 계산했을 것입니다. 그러나 모든 쿼리를 하나의 쿼리에서 얻을 수 있다면 좋을 것입니다.

EmployeeWage 
---------------------------------------------------------------------- 
| EmployeeID | RecordNum | EffectiveDate | WorkType | Wage | 
-+------------+-+-----------+-+---------------+-+----------+-+------+- 
| 6240  |  1  |  1/18/13  | Line | 6 | 
---------------------------------------------------------------------- 
| 6240  |  2  |  4/1/13  | Bench | 7 | 
---------------------------------------------------------------------- 
| 6240  |  3  |  6/1/13  | Min  | 7.35 | 
---------------------------------------------------------------------- 
| 6240  |  4  |  6/23/13  | Bench | 5 | 
---------------------------------------------------------------------- 
| 6240  |  5  |  6/24/13  | Bench | 6.25 | 
---------------------------------------------------------------------- 
| 6240  |  5  |  6/25/13  | Bench | 7.25 | 
---------------------------------------------------------------------- 

은 다음

TimeClock 
-------------------------------------------------- 
| EmployeeID | WorkType | Work Date| Hours | 
-+------------+-+----------+-+---------+-+------+- 
| 6240  | Line | 6/22/13 | 5 | 
-------------------------------------------------- 
| 6240  | Bench | 6/22/13 | 7 | 
-------------------------------------------------- 
| 6240  | Bench | 6/23/13 | 5 | 
-------------------------------------------------- 
| 6240  | Bench | 6/24/13 | 6.25 | 
-------------------------------------------------- 
| 6240  | Min  | 6/24/13 | 2 | 
-------------------------------------------------- 

결과까지 일치하는 테이블과 같아야합니다 ...

TimeClock 
----------------------------------------------------------- 
| EmployeeID | WorkType | Work Date| Hours | Wage | 
-+------------+-+----------+-+---------+-+------+-+------+- 
| 6240  | Line | 6/22/13 | 5 | 6 | 
----------------------------------------------------------- 
| 6240  | Bench | 6/22/13 | 6.25 | 7 | 
----------------------------------------------------------- 
| 6240  | Bench | 6/23/13 | 6 | 5 | 
----------------------------------------------------------- 
| 6240  | Bench | 6/24/13 | 5.5 | 6.25 | 
----------------------------------------------------------- 
| 6240  | Min  | 6/24/13 | 2 | 7.35 | 
----------------------------------------------------------- 

어떤 도움이 나를 크게도 감상 할 수있다 받으실 수 있습니다!

+0

당신은 가입에 별도의 조건이 필요합니다 그렇지 않으면 카 테시 안 (Carthesian) 제품이 나옵니다. – wildplasser

답변

0
SELECT T.EmployeeID, T.WorkType, T.[Work Date], T.Hours, 
(SELECT Max(E.EffectiveDate) 
FROM EmployeeWage E 
WHERE T.EmployeeID = E.EmployeeID 
AND T.WorkType = E.WorkType 
AND E.EffectiveDate <= T.[Work Date]) AS ActiveDate, 
E.Wage as Wage 
FROM TimeClock T, EmployeeWage EW 
WHERE T.EmployeeID = EW.EmployeeID 
AND TW.WorkType = EW.WorkType 
AND E.EffectiveDate = ActiveDate 

MS 액세스가 없으므로이 문제를 해결하지 않았습니다. 도움이나 실수가 있다면 알려주십시오.

나는 하나의 쿼리 결과를 얻을 수있는 완벽한 방법을 알고하지 않습니다, 그러나 이것은 당신이 필요로하는 것을 당신에게 기본적인 정보를 제공합니다
0

:

SELECT TimeClock.EmployeeID, TimeClock.WorkType, TimeClock.WorkDate, EmployeeWage.EffectiveDate, TimeClock.Hours, EmployeeWage.Wage 
    FROM EmployeeWage INNER JOIN TimeClock 
    ON EmployeeWage.EmployeeID = TimeClock.EmployeeID 
    AND TimeClock.WorkType = EmployeeWage.WorkType 
    WHERE TimeClock.WorkDate >= EmployeeWage.EffectiveDate; 
+0

@shahkalpesh E.Wage, TW.WorkType, E.EffectiveDate, ActiveDate에 대해 "매개 변수 값 입력"메시지가 표시됩니다. 나는 E.Wage를 EW로 변경했습니다 .Wage, TW.WorkType to T.WorkType, E.EffectiveDate to EW.EffectiveDate. 이제 ActiveDate에 대한 프롬프트가 나타납니다. –

+0

예, 죄송합니다. 테스트하기 전에 코드를 작성하고 테스트 한 이후에 수정했습니다. 새 코드를 사용해보고 그 코드가 작동하는지 확인하십시오. _WorkDate_는 DB에서 다를 수 있습니다. – Sabe

관련 문제