2017-08-09 100 views
0

我想比較兩個字段中的oracle select查詢作爲case語句的一部分,其中一個來自子查詢,但我得到錯誤。將子查詢中的1個字段與其他字段進行比較?

E.g

select 1 as one, 
     (select 2 from dual) as two, 
     case when one=two then 'EQUAL' 
      else 'NOTEQUAL' 
     end match 
from dual; 

錯誤ORA-00904:雙無效標識符

思考如何改寫呢?

提前致謝!

+1

您需要嵌套查詢,然後比較平等。 –

+0

一個和兩個列別名不在case語句的範圍內。所以它不知道你可以在案例中使用完整表達式或者在外部查詢中使用案例。 – xQbert

回答

0

問題是你不能使用別名在同一水平上,你需要做一個子查詢或CTE

WITH step1 as (
    select 1 as one 
    from dual 
), step2 as (
    select 2 as two 
    from dual 
) 
SELECT case when one=two then 'EQUAL' 
      else 'NOTEQUAL' 
     end match 
FROM step1 
CROSS JOIN step2 
1

你不能使用別名,所以你必須重寫數據源和子查詢。

SELECT 1 as one, 
     (SELECT 2 FROM dual) as two, 
     CASE WHEN 1 = (SELECT 2 FROM dual) 
      THEN 'EQUAL' 
      ELSE 'NOTEQUAL' 
     END match 
    FROM dual 

結果

one two match 
1 2 NOTEQUAL 
0

使用簡單的子查詢

Select t.*, 
     case when one=two then 'EQUAL' 
      else 'NOTEQUAL' 
     end match 
From (
    select 1 as one, 
      (select 2 from dual) as two 
    from dual 
) t; 
相關問題