我有两个查询:一个返回表ODF_CA_OTHER中分配给团队领导( Team,ODF_CA_OTHER)的每个人/资源的ID和名称,另一个返回表PRJ_RESOURCES中具有(PRPRIMARYROLEID = 5112005)的每个资源的ID和名称。
是否有一种方法在单个查询中返回在PRJ_RESOURCES表中具有Team主角色的每个人的ID和名称,以及在ODF_CA_OTHER表中指定为Team (NL_TEAM_LEAD)的每个人的ID和名称(没有重复的名称)?
我之所以问这个问题,是因为我需要为一个查找屏幕创建这个查询,该查询包括所有的团队领导和被分配为团队领导的任何人,但并不是每个被分配为团队领导的人都必须在“资源”表中扮演一个团队领导的主要角色。
坦率地说,我完全不知道如何在一个查询中处理这个问题。
-- Resources with Team Lead primary role in PRJ_RESOURCES
SELECT DISTINCT
SRM.ID AS ID,
CASE
WHEN SRM.LAST_NAME IS NULL AND SRM.FIRST_NAME IS NULL AND SRM.MIDDLE_NAME IS NULL THEN ' '
ELSE CONCAT(CONCAT(CONCAT(SRM.LAST_NAME, ', '), SRM.FIRST_NAME), NVL(SRM.MIDDLE_NAME, ''))
END AS NAME
FROM
SRM_RESOURCES SRM
JOIN
PRJ_RESOURCES PRJ ON SRM.ID = PRJ.PRID
WHERE
PRJ.PRPRIMARYROLEID = 5112005;
-- Resources assigned as Team Lead in ODF_CA_OTHER
SELECT DISTINCT
OTH.NL_TEAM_LEAD AS ID,
CASE
WHEN SRM.LAST_NAME IS NULL AND SRM.FIRST_NAME IS NULL AND SRM.MIDDLE_NAME IS NULL THEN ' '
ELSE CONCAT(CONCAT(CONCAT(SRM.LAST_NAME, ', '), SRM.FIRST_NAME), NVL(SRM.MIDDLE_NAME, ''))
END AS NAME
FROM
ODF_CA_OTHER OTH
JOIN
SRM_RESOURCES SRM ON OTH.NL_TEAM_LEAD = SRM.ID;发布于 2020-02-20 16:47:53
您可以执行一个简单的union,但是在这两种情况下都要从srm_resources中进行选择,所以更快的是检查id是否存在于具有角色5112005 或odf_ca_other中的的资源中。
select id, nvl(trim(last_name||' '||first_name), ' ') as name
from srm_resources srm
where exists (select 1 from prj_resources prj
where prid = srm.id and prprimaryroleid = 5112005)
or exists (select 1 from odf_ca_other oth
where nl_team_lead = srm.id)在这种情况下,您可能不需要distinct。无论您想要什么格式名称,如果case对您有效,请使用它。
https://stackoverflow.com/questions/60323672
复制相似问题