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
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