Cognos 11 — фильтр между субъектами запроса

#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)