我的任務是只回傳具有唯一 ID 的行,但為 SQL 中的每個 ID 回傳一行。我該怎么辦?
邏輯:對于主行,選擇 where JOB_INDICATOR = 'P'。如果有多行,則使用 PRIM_ROLE_IND = 'Y' 的記錄。如果還有多個,則選擇從 0 開始的編號最小的 EMPL_RCD。
示例起點:
| ID | 姓名 | 作業 | 作業指標 | prim_role_ind | empl_rcd |
|---|---|---|---|---|---|
| 1001 | 約翰·多伊 | 導向器 | 磷 | ? | 0 |
| 1001 | 約翰·多伊 | 教授 | 磷 | 是 | 1 |
| 1001 | 約翰·多伊 | 教練 | ? | ? | 2 |
| 1002 | 鮑勃·瓊斯 | 主管清潔工 | 磷 | 是 | 0 |
| 1002 | 鮑勃·瓊斯 | 助理清潔工 | 磷 | 是 | 1 |
| 1003 | 蘇珊·史密斯 | 場地管理員 | 磷 | ? | 0 |
| 1003 | 蘇珊·史密斯 | 教授 | 磷 | ? | 1 |
期望回報:
| ID | 姓名 | 作業 | 作業指標 | prim_role_ind | empl_rcd |
|---|---|---|---|---|---|
| 1001 | 約翰·多伊 | 教授 | 磷 | 是 | 1 |
| 1002 | 鮑勃·瓊斯 | 主管清潔工 | 磷 | 是 | 0 |
| 1003 | 蘇珊·史密斯 | 場地管理員 | 磷 | ? | 0 |
到目前為止,我有以下內容,但添加了一個新要求來執行條件組件。
SELECT *
FROM EMPLOYEE
WHERE JOB_INDICATOR = 'P'
uj5u.com熱心網友回復:
您可以使用視窗函式ROW_NUMBER()來完成此操作:
SELECT *
FROM
(
SELECT EMPLOYEE.*, ROW_NUMBER() OVER (PARTITION BY id ORDER BY
prim_role_ind DESC, empl_rcd ASC) as rn
FROM EMPLOYEE
WHERE JOB_INDICATOR = 'P'
) dt
WHERE rn = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472546.html
