如何有条件地 select SQL 中的唯一值?

How do I conditionally select a unique value in SQL?

我的任务是 return 只处理具有唯一 ID 的行,但 return 为 SQL 中的每个 ID 处理一行。我该怎么做?

逻辑: 对于主行,select 其中 JOB_INDICATOR = ‘P’。如果有多行,则使用 PRIM_ROLE_IND = ‘Y’ 的记录。如果还有多个,则 select 最低编号 EMPL_RCD 从 0 开始。

示例起点:

id name job job_indicator prim_role_ind empl_rcd
1001 John Doe Director P N 0
1001 John Doe Professor P Y 1
1001 John Doe Coach N N 2
1002 Bob Jones Head Janitor P Y 0
1002 Bob Jones Associate Janitor P Y 1
1003 Susan Smith Groundskeeper P N 0
1003 Susan Smith Professor P N 1

想要return:

id name job job_indicator prim_role_ind empl_rcd
1001 John Doe Professor P Y 1
1002 Bob Jones Head Janitor P Y 0
1003 Susan Smith Groundskeeper P N 0

到目前为止,我有以下内容,但添加了一个新要求来执行条件组件。

SELECT * 
FROM EMPLOYEE 
WHERE JOB_INDICATOR = 'P'

您可以使用 window 函数 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