簡體   English   中英

如果第一個條件滿足執行它,否則在 Oracle 中的第二個條件

[英]If first condition satisfies perform it, otherwise second condition in Oracle

我正在嘗試從表中按狀態獲取員工。 我有 2 個狀態,如果員工有A條件,則取該行,否則取P狀態行,最大oper_day如下所示:

桌子

---------------------------------------------------
id  |  emp_code  | name    | status   | oper_day  |
--------------------------------------------------
1   |  164094    | John    | P        | 2020-10-02 |
2   |  164094    | John    | P        | 2020-10-09 |
3   |  164094    | John    | A        | 2020-10-10 |
4   |  145890    | Mike    | P        | 2020-10-05 |

我的結果應該如下所示

--------------------------------
id  |  emp_code  | name    | status   | oper_day  |
--------------------------------------------------
1   |  164094    | John    | A        | 2020-10-10 |
2   |  145890    | Mike    | P        | 2020-10-05 |

任何幫助表示贊賞

使用ROW_NUMBER

WITH cte AS (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY emp_code ORDER BY status, oper_day DESC) rn
    FROM yourTable t
)

SELECT id, emp_code, name, status, oper_day  
FROM cte
WHERE rn = 1;

這里的邏輯是,如果員工有狀態A記錄,它將被分配第一個行號,因為AP之前排序。 否則,將選擇P狀態記錄。 如果有多個記錄,我們會為每個員工選擇最近的記錄。

您可以將聚合函數與KEEP( DENSE_RANK FIRST ORDER BY ... )

SELECT MAX( id ) KEEP ( DENSE_RANK FIRST ORDER BY status ASC, oper_day DESC ) AS id,
       emp_code,
       MAX( name ),
       MIN( status ) AS status,
       MAX( oper_day ) KEEP ( DENSE_RANK FIRST ORDER BY status ) AS oper_day
FROM   table_name
GROUP BY
       emp_code

其中,對於您的示例數據:

CREATE TABLE table_name ( id, emp_code, name, status, oper_day ) AS
SELECT 1, 164094, 'John', 'P', DATE '2020-10-02' FROM DUAL UNION ALL
SELECT 2, 164094, 'John', 'P', DATE '2020-10-09' FROM DUAL UNION ALL
SELECT 3, 164094, 'John', 'A', DATE '2020-10-10' FROM DUAL UNION ALL
SELECT 4, 145890, 'Mike', 'P', DATE '2020-10-05' FROM DUAL;

輸出:

\n身份證 |  EMP_CODE |  MAX(姓名) | 狀態 |  OPER_DAY           \n -: |  -------: |  :-------- |  :----- |  :------------------\n  4 |  145890 | 邁克 |  P |  2020-10-05 00:00:00\n  3 |  164094 | 約翰 | 一個 |  2020-10-10 00:00:00\n

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM