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 |
-----------------------------------------------------------

任何帮助我到那里将不胜感激!

4

2 回答 2

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-Access,也没有尝试过。让我知道它是否有帮助或错误,如果有的话。

于 2013-07-10T18:26:03.347 回答
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;
于 2013-07-10T19:11:23.853 回答