WHERE子句中的问题(不知道如何在WHERE子句中解决来自DECODE()函数的结果)

zer*_*ble 0 database oracle excel vba plsql

我有一个相当简单的PL/SQL查询

(...)
DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE
(...)
Run Code Online (Sandbox Code Playgroud)

如何使用上面的语句应用WHERE子句,因为当我使用类似的东西时:

WHERE upper(VALUE) like 'SOMETHING'
Run Code Online (Sandbox Code Playgroud)

它给了我一个空记录集(我绝对肯定有记录符合这些要求).

我不知道这是否重要,但我在Excel工作簿中调用此查询,使用VBA和CreateObject("OracleInProcServer.XOraSession").

Dav*_*sta 5

接受的解决方案的问题是您必须两次写出DECODE表达式.这可能是一个维护问题,因为它打开了表达式的两个实例在某些时候会出现分歧的可能性.

另一种方法是嵌套查询,以便您可以直接在谓词中使用DECODE的结果.

SELECT * FROM (
  SELECT DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE
    FROM ...
  )
  WHERE UPPER(value) LIKE 'X%'
Run Code Online (Sandbox Code Playgroud)