Укажите значение по умолчанию, в котором нет подходящей записи - PullRequest
2 голосов
/ 12 марта 2012

Коллега пытается создать отчет в системе ERP с пользовательской функцией отчетности; Базовая БД - Oracle 11g. Важным фактом здесь является то, что функция отчетности ERP может ограничивать подходы, которые мы можем использовать для этого отчета. Это подозрение моих коллег, но я недостаточно знаю об этом, чтобы подтвердить это.

Проблема: У нас есть таблица с подробным описанием позиций в компании, которую мы назовем Roles, и еще одна таблица, в которой хранятся данные о назначении каждой роли для заданных временных окон, и мы назовем это PersonRoles.

.

На указанную дату мы хотим вернуть человека или людей (может быть несколько человек, выполняющих одну и ту же роль одновременно), которые имеют определенную роль.

Однако иногда роли будут вакантными в течение определенного периода; например, если PersonA удерживает роль с января по май, а PersonB исполняет роль с августа по декабрь, будут 2-месячные окна, в которых никто не находился в посте. В этом случае, когда мы делаем запрос к такому дню (июнь / июль), мы хотим вернуть стандартный результат (скажем, «Вакансия»).

Мало того, что мне было бы интересно услышать «лучший» подход, но и другие подходы могли бы лучше соответствовать предполагаемым ограничениям этого инструмента отчетности, поэтому они также будут приветствоваться.

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Не зная ограничений инструмента отчетности, очевидно, трудно ответить на этот вопрос. Однако самый простой подход - сделать внешнее соединение. Что-то вроде

SELECT r.role_name,
       nvl( pr.person_name, 'Vacant' )
  FROM roles r
       LEFT OUTER JOIN personRoles pr  
         ON(    r.role_id = pr.rold_id
            AND <<some date parameter>> BETWEEN pr.start_date AND pr.end_date)
3 голосов
/ 12 марта 2012

Левое внешнее объединение из таблицы Roles в таблицу PersonRoles идентификатора роли и периода даты.Включите элемент coalesce(PersonRoles.PersonIdentifier,'Vacant').

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