WHERE子句中的问题(不知道我怎样才能在WHERE子句中解决DECODE()函数的结果)

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

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

我如何使用上面的语句应用WHERE子句,因为当我使用如下所示的内容时:

 WHERE upper(VALUE) like 'SOMETHING' 

它给了我一个空的logging集(我绝对肯定有logging满足这些要求)。

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

最简单的解决scheme是复制和粘贴。

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

尽pipe如此, SOMETHING并不是一个好的search模式。

接受的解决scheme的问题是你必须写出DECODEexpression式两次。 这可能是一个维护问题,因为它打开了expression式的两个实例在某些时候会发生分歧的可能性。

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

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

DECODE函数的输出将是'---'table2.column2

这个解码等同于:

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

我猜你想过滤有upper(TABLE.Column) = 'SOMETHING' ,在这种情况下,你会使用:

 WHERE upper(VALUE) = '---'