У меня есть следующая проблема. В одной таблице у меня есть список клиентов с идентификатором, в другой таблице у меня есть список вызовов для этих клиентов. В datamodel я обозначил отношения 0 для многих. 1 Клиент может иметь 0 или несколько вызовов. Когда я создаю свой запрос, я добавляю идентификатор клиента и имя клиента из таблицы клиентов, а затем добавляю счет из таблицы вызовов. В разделе фильтра у меня есть фильтр на идентификаторе клиента и фильтр по диапазону дат в таблице вызовов.Создание Left Outer Join Query in Cognos
Таким образом, я получаю только клиентов, которые имели вызовы и клиенты без звонков, не отображаются в результатах. С помощью SQL я написал один и тот же запрос для проверки результатов, и вот что я нашел.
Используя этот запрос, я получаю оба клиента, которые имеют вызовы и не имеют вызовов. Count (CallId) возвращает 0.
select ct.clientid
,ct.ClientName
,count(cs.callid)
from client ct
left outer join calls cs
on ct.clientid = cs.clientid
and cs.CallRecievedDateTime > '1/1/2012'
and cs.CallRecievedDateTime < '1/2/2012'
where ct.clientid in (1,2,5)
group by ct.clientid, ct.ClientName
Используя этот запрос, я получаю счета только для клиентов с вызовами. и клиенты без вызовов не отображаются в результатах
select ct.clientid
,ct.ClientName
,count(cs.callid)
from client ct
left outer join calls cs
on ct.clientid = cs.clientid
where ct.clientid in (1,2,5)
and cs.CallRecievedDateTime > '1/1/2012'
and cs.CallRecievedDateTime < '1/2/2012'
group by ct.clientid, ct.ClientName
я выяснял способ имитации этого в Cognos. Я решил эту проблему, создав дополнительные запросы cognos только для клиента, а затем присоединился к ней для подсчета запросов и использования результатов для отображения. Я хочу знать, есть ли способ сделать это в одном запросе COGNOS.
Пожалуйста, не публикуйте SQL-запросы. Первый указанный список - это то, что я пытаюсь сделать в Cognos Application.
вот еще один способ, чтобы получить те же результаты, что и первый запрос
SELECT ClientId,
ClientName,
counts
FROM (SELECT clientid,
ClientName
FROM Client
WHERE clientid in (1,2,5)) cd
LEFT OUTER JOIN
(SELECT clientid,
COUNT(*) counts
FROM calls cs
WHERE cs.CallRecievedDateTime > '1/1/2012'
AND cs.CallRecievedDateTime < '1/2/2012'
GROUP BY clientid) b
ON cd.clientid = b.clientid
Извините, я не должен был быть креаром. В настоящее время я получаю только звонки клиентов. Я хочу, чтобы клиент не звонил. –