自19年1月1日以来,我正尝试提取员工记录。我将员工历史记录表添加到工作代码明细表中。对于每个员工记录,我要匹配员工记录生效日期的工作代码详细信息。因此,如果19年2月1日有员工记录,我希望当时有效的职务代码详细信息;并且不要拖入自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
示例结果如下。自19年1月1日以来,这刷新了Jane Doe和John Smith的所有员工记录。在此示例中,他们的每个工作代码在工作代码详细信息表中都有更新。 Jane的工作代码附带的MRR和奖金已在工作代码明细表中更新,有效日期为19/4/19。 John的MRR和附加在其工作代码上的奖金已在工作代码明细表中更新,日期为19/10/2。在提取员工记录时,结果应提取自列出日期起生效的MRR和奖金。
员工历史记录表
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
答案 0 :(得分:0)
也许有更有效的方法,但是我能够使用SELECT语句中的SELECT TOP找出来。
FOR /F "skip=1 tokens=1,2,3* delims= " %%G IN ('wmic printer get DriverName') DO (
SET ONE=%%G
SET TWO=%%H
SET THREE=%%I
CALL :LOOP
)
GOTO ENDLOOP
:LOOP
if "%ONE%"=="" GOTO ENDLOOP
if %ONE%==HP GOTO FIRSTCHECK
GOTO :EOF
:FIRSTCHECK
if %TWO%==DESKJET GOTO SECONDCHECK
GOTO :EOF
:SECONDCHECK
if %THREE%==1000 GOTO 1000
if %THREE%==2000 GOTO 2000
if %THREE%==3000 GOTO 3000
GOTO :EOF
:1000
ECHO Found HP DeskJet 1000
pause
GOTO :EOF
:2000
ECHO Found HP DeskJet 2000
pause
GOTO :EOF
:3000
ECHO Found HP DeskJet 3000
pause
GOTO :EOF
:ENDLOOP