【发布时间】:2019-11-12 16:28:11
【问题描述】:
我正在尝试提取自 2019 年 1 月 1 日以来的员工记录。我正在将员工历史记录表加入工作代码详细信息表。对于每个员工记录,我想匹配截至员工记录生效日期的职位代码详细信息。因此,如果 2/1/19 有员工记录,我会想要当时有效的工作代码详细信息;并且它不会拉入堆栈作业代码详细信息的顶部,该详细信息可能自 2/1/19 以来已更改。我在正确编码方面遇到问题。
我已经尝试了下面的代码,但不确定它是否正确。我加入了 J2 表以获取另一个报告,以提取堆栈作业代码记录的顶部(即 WHERE J2.EFFDT = NULL)。不确定我当前的请求是否需要使用类似的东西,以及如何将其合并到 WHERE 语句中。
SELECT
E.EMPLID AS [EE ID]
,E.Name AS [Name]
,E.EFFDT AS [Eff Date]
,E.COMPANY AS [Co.]
,E.JOBCODE AS [Job Code]
,E.JOBTITLE [Title]
,J.GRADE AS [MRR]
,J.BONUS AS [Bonus]
,J.OCC_TYPE AS [OCC]
,E.EMPL_STATUS_DESC AS [Status]
FROM Employee History AS [E]
LEFT JOIN JobCodeTable AS [J]
ON E.JOBCODE = J.JOBCODE
LEFT JOIN JobCodeTable AS [J2]
ON (
J.JOBCODE = J2.JOBCODE
AND
J.EFFDT < J2.EFFDT
)
WHERE E.EMPL_STATUS_DESC = 'Active'
AND
E.EFFDT >= '2019-01-01'
AND
E.EFFDT >= J.EFFDT
示例结果如下。这将提取自 2019 年 1 月 1 日以来 Jane Doe 和 John Smith 的所有员工记录。在此示例中,他们的每个职务代码都在职务代码详细信息表中完成了更新。 Jane 的工作代码附加的 MRR 和奖金已在工作代码详细信息表中更新,自 2019 年 4 月 1 日起生效。 John 的工作代码附带的 MRR 和奖金已在工作代码详细信息表中更新,自 2019 年 2 月 10 日起生效。拉取员工记录时,结果应拉取截至所列日期有效的MRR和Bonus。
员工历史记录表
EE ID || Name || Eff Date || Co. || Job Code || Title || Status
12345 || Jane Doe || 5/12/2019 || Apple || A9999 || VP || Active
12345 || Jane Doe || 2/1/2019 || Apple || A9999 || VP || Active
54321 || John Smith || 6/5/2019 || Apple || A0002 || Mgr || Active
54321 || John Smith || 4/29/2019 || Apple || A0002 || Mgr || Active
54321 || John Smith || 1/12/2019 || Apple || A0002 || Mgr || Active
职位代码明细表
Job Code|| Title || Eff Date || MRR || Bonus || OCC
A9999 || VP || 4/1/2019 || 5 || 25% || E
A9999 || VP || 1/12/2019 || 4 || 20% || E
A0002 || Mgr || 2/10/2019 || 3 || 15% || E
A0002 || Mgr || 11/01/2018 || 2 || 10% || E
报告应该提取什么
EE ID || Name || Eff Date || Co. || Job Code || Title || MRR|| Bonus || OCC || Status
12345 || Jane Doe || 5/12/2019 || Apple || A9999 || VP || 5 || 25% || E || Active
12345 || Jane Doe || 2/1/2019 || Apple || A9999 || VP || 4 || 20% || E || Active
54321 || John Smith || 6/5/2019 || Apple || A0002 || Mgr || 3 || 15% || E || Active
54321 || John Smith || 4/29/2019 || Apple || A0002 || Mgr || 3 || 15% || E || Active
54321 || John Smith || 1/12/2019 || Apple || A0002 || Mgr || 2 || 10% || E || Active
【问题讨论】:
-
请用您实际使用的数据库(例如 SQL Server、Access)标记您的问题。 “SQL”只是一种语言,而不是实际产品。
-
我很抱歉;我已将 SQL Server 添加到标签中。
-
请发布一些示例数据和预期结果来说明问题。
-
我确实添加了我正在查看的表格以及预期结果应该是什么。谢谢。
标签: sql sql-server join