Я понял, что если не существует 2 во всех данных, которые вы не хотите фильтровать, но если в столбце 2 есть 2, то вы хотите его.
, поэтому попробуйте это:
РЕШЕНИЕ 1:
SELECT * FROM
(
WITH DATASET AS (
SELECT 1 A, 10 B, 100 RR FROM DUAL
UNION
SELECT NULL A, 10 B, 200 RR FROM DUAL
)
SELECT
RR
FROM
DATASET
WHERE B=10
AND EXISTS
(
SELECT 1 FROM DATASET WHERE A=2
)
)
UNION
SELECT * FROM
(
WITH DATASET AS (
SELECT 1 A, 10 B, 100 RR FROM DUAL
UNION
SELECT NULL A, 10 B, 200 RR FROM DUAL
)
SELECT
RR
FROM
DATASET
WHERE B=10
AND NOT EXISTS
(
SELECT 1 FROM DATASET WHERE A=2
)
)
РЕШЕНИЕ2:
WITH DATASET AS (
SELECT 1 A, 10 B, 100 RR FROM DUAL
UNION
SELECT NULL A, 10 B, 200 RR FROM DUAL
)
,SUB AS (
SELECT DISTINCT 1 A_EXISTS,RR
FROM DATASET
WHERE A=2
),
SUB2 AS (
SELECT DISTINCT
CASE
WHEN SUB.A_EXISTS IS NOT NULL AND DATASET.A=2
THEN SUB.RR
WHEN SUB.A_EXISTS IS NOT NULL AND DATASET.A<>2
THEN NULL
ELSE DATASET.RR
END RR
FROM
DATASET
FULL OUTER JOIN SUB ON A_EXISTS=1
WHERE DATASET.B=10
)
SELECT
*
FROM SUB2
WHERE RR IS NOT NULL