#cognos #cognos-11
#cognos #cognos-11
Вопрос:
Дана таблица A со столбцами: ColA1, ColA2, ColA3
И таблица B со столбцами: ColB1
Я хочу ограничить данные, которые могут быть возвращены из таблицы A на основе данных в таблице B, например:
ColA1 not in ColB1
В идеале, каким-то образом включить SQL-запросы в фильтр с помощью операторов select
Ответ №1:
То, что вы хотите, это
SELECT a.ColA1
, a.ColA2
, a.ColA3
FROM TableA a
LEFT OUTER JOIN TableB b on b.ColB1 = a.ColA1
WHERE b.ColB1 IS NULL
Итак…
Запрос 1 содержит ColA1, ColA2 и ColA3 из TableA.
Запрос 2 содержит ColB1 из TableB.
Запрос 3
- объединяет Query1 и Query2 в ColA1 1..1 = 0..1 ColB1
- Элементы данных: ColA1, ColA2, ColA3
- Фильтр: ColB1 НЕ РАВЕН НУЛЮ
Комментарии:
1. Будет ли это в теме запроса или в отдельном фильтре? В субъектах запроса я добавил несколько фильтров через предложение where, но они, похоже, не работают. Они работают при запуске в SQL, а также при запуске сгенерированного Cognos 11 SQL в Oracle, но я предполагаю, что из-за соединений / ссылок в Framework Manager предложения where каким-то образом нарушаются и, следовательно, не работают
2. Я предполагаю, что вы никогда раньше не использовали Cognos? Вы не помещаете предложение WHERE в выражение элемента данных. В Cognos вы перетаскиваете. Я описал создание 2 запросов и объединение их в третий — и как настроить объединение. Код SQL был для справки на случай, если вы лучше разбираетесь в коде SQL, чем в графическом интерфейсе Cognos.
Ответ №2:
вероятно, то, что вы ищете, не существует
Попробуйте что-то вроде этого
select * from TableA as T1
where not exists
(select * from TableB as T2
where t1.key1 = t2.key1 and T1.key2 = t2.key2)