Используйте DECODE
с оконной функцией COUNT(DISTINCT...)
. Т.е.
SELECT t.*,
DECODE(count(distinct data_type) over ( partition by id),
1, data_type,
2, 'Both'
) condition
FROM test_data t;
Пример
with test_data ( data_type, id ) AS (
SELECT 'J','A' FROM DUAL UNION ALL
SELECT 'J','A' FROM DUAL UNION ALL
SELECT 'G','A' FROM DUAL UNION ALL
SELECT 'J','A' FROM DUAL UNION ALL
SELECT 'J','B' FROM DUAL UNION ALL
SELECT 'J','B' FROM DUAL UNION ALL
SELECT 'J','B' FROM DUAL)
SELECT t.*, DECODE(count(distinct data_type) over ( partition by id), 1, data_type, 2, 'Both') condition
FROM test_data t;
+-----------+----+-----------+
| DATA_TYPE | ID | CONDITION |
+-----------+----+-----------+
| G | A | Both |
| J | A | Both |
| J | A | Both |
| J | A | Both |
| J | B | J |
| J | B | J |
| J | B | J |
+-----------+----+-----------+