Oracle - Возвращать одни и те же данные из разных таблиц на основе разных условий? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть два запроса: один возвращает идентификатор и имя каждого человека / ресурса, назначенного в качестве лидера команды (NL_TEAM_LEAD) в таблице ODF_CA_OTHER, а другой возвращает идентификатор и имя каждого ресурса с командой Главная роль (PRPRIMARYROLEID = 5112005) в таблице PRJ_RESOURCES.

Существует ли способ в одном запросе вернуть идентификатор и имя каждого, у кого есть основная роль руководителя группы в PRJ_RESOURCES таблицу, а также каждого, назначенного в качестве руководителя группы (NL_TEAM_LEAD) в таблице ODF_CA_OTHER (без повторяющихся имен)?

Я спрашиваю, потому что мне нужно создать этот запрос для экрана поиска, который включает в себя все Командные лидеры и все, кто назначен в качестве Командного лидера, но не все, назначенные в качестве Командного лидера, обязательно будут иметь главную роль командного лидера в таблице ресурсов. один запрос.

-- 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;

1 Ответ

1 голос
/ 20 февраля 2020

Вы можете сделать простое union, но вы выбираете из srm_resources в обоих случаях, поэтому еще быстрее будет проверить, существует ли идентификатор в ресурсах с ролью 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, если оно вам подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...