Проблема в предложении WHERE (не знаю, как я могу обратиться к результатам функции DECODE () в предложении WHERE) - PullRequest
0 голосов
/ 26 июня 2009

У меня довольно простой запрос PL / SQL

(...)
DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE
(...)

Как я могу применить предложение WHERE, используя приведенное выше утверждение, потому что когда я использую что-то вроде:

WHERE upper(VALUE) like 'SOMETHING'

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

Не знаю, имеет ли это значение, но я вызываю этот запрос из книги Excel, используя VBA и CreateObject("OracleInProcServer.XOraSession").

Ответы [ 3 ]

5 голосов
/ 26 июня 2009

Проблема с принятым решением состоит в том, что вам нужно выписать выражение DECODE дважды. Это может быть проблемой обслуживания, поскольку открывает возможность того, что два экземпляра выражения в какой-то момент будут расходиться.

Еще один способ сделать это - вложить запросы, чтобы вы могли использовать результат DECODE непосредственно в своем предикате.

SELECT * FROM (
  SELECT DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE
    FROM ...
  )
  WHERE UPPER(value) LIKE 'X%'
1 голос
/ 26 июня 2009

Выход функции DECODE будет либо '---', либо table2.column2.

Этот декодер эквивалентен:

CASE upper(Table.Column) = 'SOMETHING' THEN '---' ELSE TABLE2.COLUMN2 END

Я предполагаю, что вы хотите отфильтровать строки с upper(TABLE.Column) = 'SOMETHING', в этом случае вы бы использовали:

WHERE upper(VALUE) = '---'
1 голос
/ 26 июня 2009

Самое простое решение - скопировать и вставить.

WHERE upper(DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2)) like 'SOMETHING'

SOMETHING не является хорошим шаблоном поиска для LIKE.

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