Oracle找出带有绑定变量的要求的延迟项目

发布于 2025-02-11 05:55:04 字数 2415 浏览 0 评论 0原文

表项目

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

输出标准:

  1. SEXCEED应早于用户设置日期(SETDATE)。否则应比用户设置日期(setDate)早。取决于状态是性别或授权的。如果状态是性行为的,则应将用户设置日期(setDate)进行性爱。如果状态是依据的,则应将用户设置日期(setDate)拒绝。
  2. 员工(PJINC)应在sexceed日期之前的一天工作10个小时以上。
  3. 假设用户设置(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在输出中。
  4. 假设用户设置(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:

  1. 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).
  2. The employee(PJINC) should be work more than 10 hours one day before the SExceed, EExceed date.
  3. 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.
  4. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文