Select Oracle Case 语句中的语句

Select statement in Case statement in Oracle

  SELECT (CASE WHEN T.ID  = ( SELECT cte.REFERENCE FROM trans cte WHERE T.ID  
 = CTE.PARENT_ID) THEN cte.REFERENCE ELSE null END) AS name 
 FROM   trans T

示例:我以一个交易金额为例。在 ID=1 的 trans table 中,然后在同一个 table 中,我需要查找 PARENT_ID=1。 当我查找 parent_ID=1 时,它的 ID 值会有所不同。 这不是ID=Parent_ID。 一旦我寻找 parent_ID=1 然后将其相应的参考值打印为名称。 我在 oracle 中尝试了上面的 sql 语句,但它没有用。能否请教一下,case语句中的这个语句怎么写。

为什么不尝试自连接而不是子查询?

SELECT CASE
         WHEN nvl(t1.id,-1) = nvl(t2.reference, -1) THEN t2.reference
         ELSE 1
       END     AS number_col
  FROM trans t LEFT JOIN trans t2 ON (t.id = t2.parent_id);

您也可以尝试将其作为不带 case 语句的子查询

SELECT t.id,
       NVL ((SELECT t2.reference
               FROM trans t2
              WHERE t.id = t2.parent_id AND t.id = t2.reference AND ROWNUM = 1),
            1)    AS number_val
  FROM trans t