Я просто еще раз посмотрел.Мой предыдущий комментарий не был точным.
Я могу свести ваш запрос к чему-то, что немного легче читать:
SELECT coalesce(XR.X_RESEARCH, 'N') as X_RESEARCH
, F.ROW_ID
, E.ROW_ID A
FROM F
INNER JOIN G ON G.CON_ID = dbo.S_CONTACT.ROW_ID
INNER JOIN E ON E.ROW_ID = G.ACTIVITY_ID
LEFT OUTER JOIN (
select DISTINCT PC.X_RESEARCH
, P.PR_EMP_ID as E_PER_ID
, PC.CON_ID AS F_ROW_ID
FROM PC
INNER JOIN P ON PC.POSTN_ID = P.ROW_ID
AND P.EMP_ID = P.PR_EMP_ID
INNER JOIN CE ON CE.PAR_ROW_ID = P.EMP_ID
--AND CE.PAR_ROW_ID = P.PR_EMP_ID
WHERE PC.X_RESEARCH = 'Y'
) XR ON XR.E_PER_ID = E.PER_ID
AND XR.F_ROW_ID = F.ROW_ID
У Cognos проблемы с ISNULL
.Вам повезет больше с COALESCE
.
. Ваше значение X_RESEARCH
будет равно Y
только тогда, когда P.EMP_ID = P.PR_EMP_ID
.
dbo.S_CONTACT
еще не включено в предложение FROM, поэтому это все равно не удастся.
Обычно я использую 3 пространства имен непосредственно под основным пространством имен для проекта:
- Физический уровень
- Бизнес-уровень
- Уровень представления
Но это обычно для витрин данных.То, что вы пытаетесь сделать, может использовать этот шаблон, но я не буду использовать здесь слой представления.
Щелкните правой кнопкой мыши на физическом слое и используйте «Мастер импорта метаданных ...», чтобы Cognos создалтемы запросов из вашей базы данных (F, G, E, P, ПК, CE).Похоже, вы уже сделали этот шаг.
В бизнес-уровне создайте тему запроса для каждой из физических тем запроса.Они должны быть «модельными» субъектами запросов.
Создать отношения между субъектами бизнес-запросов.
(Эти два последних шага могут не понадобиться. Возможно, вы сможете использовать физический уровень дляудовлетворить ту же потребность. Но выполнение этого способа может облегчить восстановление после изменений базы данных в будущем.)
Создайте тему запроса, которая объединит P, PC и CE (я назвал подзапрос XR выше),Добавьте к этому фильтр PC.X_RESEARCH = 'Y'
.
Создайте отношения между XR, F и E.
Создайте тему запроса, содержащую ваш окончательный вывод.