sql >> データベース >  >> RDS >> Oracle

ジョブ ロールに関して、資格のある休暇を超えて取得した従業員を検索するためのクエリ

    これにより、休暇の種類ごとに休暇の金額を超えた各ユーザーが見つかります。

    SQL フィドル

    Oracle 11g R2 スキーマのセットアップ :

    CREATE TABLE Employee24( EMPLOYEEID, JOBROLES ) ASSELECT 1, 'RoleA' FROM DUAL UNION ALLSELECT 2, 'RoleB' FROM DUAL UNION ALLSELECT 3, 'RoleB' FROM DUAL;CREATE TABLE Leave25( EMPLOYEEID,LEAVEID, LEAVETYPE , STARTDATE, ENDDATE) ASSELECT 1,1,'SickLeave', DATE '2018-01-01', DATE '2018-01-11' FROM DUAL UNION ALLSELECT 1,2,'SickLeave', DATE '2018-01-21 ', DATE '2018-01-31' FROM DUAL UNION ALLSELECT 1,3,'EarnedLeave',DATE '2018-01-11', DATE '2018-01-21' FROM DUAL UNION ALLSELECT 1,4,'EarnedLeave' ,DATE '2018-02-01', DATE '2018-02-11' FROM DUAL UNION ALLSELECT 1,5,'EarnedLeave',DATE '2018-02-21', DATE '2018-03-03' FROM DUAL UNION ALLSELECT 2,6,'EarnedLeave',DATE '2018-02-01', DATE '2018-02-13' FROM DUAL UNION ALLSELECT 3,7,'SickLeave', DATE '2018-01-01', DATE '2018 -01-09' FROM DUAL;CREATE TABLE JOBROLESELIGIBLELE(JOBROLES, ELIGIBLE_SICK_LEAVES, ELIGIBLE_EARNED_LEAVES) ASSELECT 'RoleA', 14, 24 FROM DUAL UNION ALLSELECT 'RoleB', 7, 10 FROM DUAL;  

    クエリ 1 :

    SELECT e.employeeId, l.leavetype, l.days_leave, r.AllowedLeaveAmountFROM Employee24 e INNER JOIN ( SELECT employeeId, SUM( enddate - startdate ) AS days_leave, leavetype FROM Leave25 GROUP BY employeeId, leaveType ) l ON ( e.employeeId =l.employeeId ) INNER JOIN ( SELECT * FROM JobRolesEligibleLE UNPIVOT ( AllowedLeaveAmount FOR LeaveType IN ( Eligible_Sick_Leaves AS 'SickLeave', Eligible_Earned_Leaves AS 'EarnedLeave' ) ) ) r ON ( l.leavetype =r.leavetype AND e. jobroles =r.jobroles )WHERE l.days_leave> r.AllowedLeaveAmount  

    結果 :

    <プレ>|従業員 ID |休暇の種類 | DAYS_LEAVE | ALLOWEDLEAVEAMOUNT ||------------|-------------|------------|------- -------------|| 1 |病欠 | 20 | 14 || 1 |有給休暇 | 30 | 24 || 2 |有給休暇 | 12 | 10 || 3 |病欠 | 8 | 7 |


    1. SqlalchemyとPostgreSql:将来的に競合することなく主キーを手動で設定する方法は?

    2. MySQL CASE式でOR条件を使用するにはどうすればよいですか?

    3. MYSQL MYSQLで2つの日付間のカスタム月差を実行するにはどうすればよいですか?

    4. リクエストがActiveRecord::QueryCacheミドルウェアでスタックしました