Oracle找出带有绑定变量的要求的延迟项目
表项目
PROJECT PJID STARTDYA ENDDAY STATUS PJINC
Lakers P01 03/01/2021 04/01/2021 SExceed Ken
Lakers P03 04/01/2021 05/01/2021 NonExceed John
Lakers P04 02/01/2021 03/01/2021 NonExceed Simon
Bulls P05 09/01/2021 10/01/2021 EExceed Billy
Bulls P06 07/01/2021 08/01/2021 EExceed Gary
Heat P07 08/01/2021 09/01/2021 SExceed Tim
Heat P08 05/01/2021 06/01/2021 NonExceed Mary
表员工
Project PJINC WORKDATE WORKHRS
Lakers Ken 02/28/2021 3
Lakers Ken 02/28/2021 3
Lakers Ken 02/28/2021 6
Lakers John 03/28/2021 12
Lakers Simon 04/01/2021 2
Bulls Billy 09/30/2021 3
Bulls Billy 09/30/2021 7
Bulls Gary 07/30/2021 1
Heat Tim 01/16/2021 3
Heat Mary 05/31/2021 5
预期的结果
PJINC PROJECT PJID
Ken Lakers P01
Billy Bulls P05
输出标准:
- SEXCEED应早于用户设置日期(SETDATE)。否则应比用户设置日期(setDate)早。取决于状态是性别或授权的。如果状态是性行为的,则应将用户设置日期(setDate)进行性爱。如果状态是依据的,则应将用户设置日期(setDate)拒绝。
- 员工(PJINC)应在sexceed日期之前的一天工作10个小时以上。
- 假设用户设置(setDate)为10/31/2021。以肯为例。项目湖人的状态是性别的,因此我们使用startdya是与用户设置日期(setDate)的比较,并且比用户设置日期(10/31/2021)更早。 Ken Do的Project Lakers的Partdya日子是02/28/2021,这是Startdya(03/01/2021)的详尽一天。同样,KEN的总工作时间(WorkHR)为(3+3+6),它= 12,它是> = 10。因此,ken在输出中。
- 假设用户设置(setDate)为10/31/2021。以比利为例。项目Bulls状态是概述的,因此我们使用Endday是与用户设置日期(SETDATE)的比较,并且比用户设置日期(10/31/2021)更早。 Billy Do的项目公牛末日的详尽一天是09/30/2021,这是末日的详尽日(10/01/2021)。比利(Billy)的总工作时间(Workhrs)为(3+7),它= 10,它是> = 10。因此,比利(Billy)在输出中。
以下是我目前的想法
SELECT PJINC, PROJECT, PJID,
CASE WHEN STATUS = 'SExceed' THEN
TO_DATE('10/31/2021', 'MM/DD/YYYY') /* user set day should be here (bind variable)*/ > TO_DATE(STARTDYA, 'MM/DD/YYYY')
WHEN STATUS = 'EExceed' THEN
TO_DATE('10/31/2021', 'MM/DD/YYYY') /* user set day should be here (bind variable)*/ > TO_DATE(ENDDAY, 'MM/DD/YYYY')
END as DelayProject
FROM PROJECT, EMPLOYEE
Where STATUS = 'SExceed' or STATUS = 'EExceed'
,我可以问如何对其进行编码以满足要求?
非常感谢您的帮助。
Table PROJECT
PROJECT PJID STARTDYA ENDDAY STATUS PJINC
Lakers P01 03/01/2021 04/01/2021 SExceed Ken
Lakers P03 04/01/2021 05/01/2021 NonExceed John
Lakers P04 02/01/2021 03/01/2021 NonExceed Simon
Bulls P05 09/01/2021 10/01/2021 EExceed Billy
Bulls P06 07/01/2021 08/01/2021 EExceed Gary
Heat P07 08/01/2021 09/01/2021 SExceed Tim
Heat P08 05/01/2021 06/01/2021 NonExceed Mary
Table EMPLOYEE
Project PJINC WORKDATE WORKHRS
Lakers Ken 02/28/2021 3
Lakers Ken 02/28/2021 3
Lakers Ken 02/28/2021 6
Lakers John 03/28/2021 12
Lakers Simon 04/01/2021 2
Bulls Billy 09/30/2021 3
Bulls Billy 09/30/2021 7
Bulls Gary 07/30/2021 1
Heat Tim 01/16/2021 3
Heat Mary 05/31/2021 5
Expected result
PJINC PROJECT PJID
Ken Lakers P01
Billy Bulls P05
Output criteria:
- The SExceed should be earlier than the user set date (SETDATE). OR the EExceed should be earlier than the user set date (SETDATE). Depends on the STATUS is SExceed or EExceed. If STATUS is SExceed, then SExceed should be befeore the user set date (SETDATE). If STATUS is EExceed, then EExceed should be befeore the user set date (SETDATE).
- The employee(PJINC) should be work more than 10 hours one day before the SExceed, EExceed date.
- Assume the user set the (SETDATE) is 10/31/2021. Use Ken as an example. The PROJECT Lakers STATUS is SExceed, so we use STARTDYA to be the comparison to the user set date (SETDATE) and it is earlier than the user set date (10/31/2021). The pervious day of STARTDYA of PROJECT Lakers that Ken do is 02/28/2021, which is the pervious day of STARTDYA (03/01/2021). Also the total working hours (WORKHRS) of Ken is (3+3+6) which is = 12 and it is >= 10. SO Ken is in the output.
- Assume the user set the (SETDATE) is 10/31/2021. Use Billy as an example. The PROJECT Bulls STATUS is EExceed, so we use ENDDAY to be the comparison to the user set date (SETDATE) and it is earlier than the user set date (10/31/2021). The pervious day of ENDDAY of PROJECT Bulls that Billy do is 09/30/2021, which is the pervious day of ENDDAY (10/01/2021). Also the total working hours (WORKHRS) of Billy is (3+7) which is = 10 and it is >= 10. SO Billy is in the output.
Below is my current idea
SELECT PJINC, PROJECT, PJID,
CASE WHEN STATUS = 'SExceed' THEN
TO_DATE('10/31/2021', 'MM/DD/YYYY') /* user set day should be here (bind variable)*/ > TO_DATE(STARTDYA, 'MM/DD/YYYY')
WHEN STATUS = 'EExceed' THEN
TO_DATE('10/31/2021', 'MM/DD/YYYY') /* user set day should be here (bind variable)*/ > TO_DATE(ENDDAY, 'MM/DD/YYYY')
END as DelayProject
FROM PROJECT, EMPLOYEE
Where STATUS = 'SExceed' or STATUS = 'EExceed'
May I ask how to possible to code it to fulfill the requirements?
Thank you so much for you help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论