Select
Xyz,
CASE
WHEN 'AEJ-DODGE-AC-'
||measure IN
(SELECT child
FROM interim_dim_measures_mas
WHERE child LIKE 'AEJ-DODGE-AC%'
CONNECT BY prior child = parent
START WITH parent = 'Total Revenue (GBS).1'
)
THEN -1*CAST(datavalue AS FLOAT)
ELSE CAST(datavalue AS FLOAT)
END AS amount
FROM interim_data_misbaej,
w_csrbrd
WHERE LENGTH(period) = 3
AND 'AEJ-BK-'
|| book = region_book(+)
答案 0 :(得分:1)
你可以使用LEFT JOIN强制它只运行一次,GROUP BY使用COUNT来确定是否找到了匹配项:
Select Xyz,
CASE
WHEN COUNT(m.child) THEN -1*CAST(datavalue AS FLOAT)
ELSE CAST(datavalue AS FLOAT)
END AS amount
FROM interim_data_misbaej, w_csrbrd
LEFT JOIN (
SELECT child
FROM interim_dim_measures_mas
WHERE child LIKE 'AEJ-DODGE-AC%'
CONNECT BY prior child = parent
START WITH parent = 'Total Revenue (GBS).1'
) m ON ('AEJ-DODGE-AC-' || measure) = m.child
WHERE LENGTH(period) = 3
AND 'AEJ-BK-' || book = region_book(+)
GROUP BY Xyz, measure, datavalue