Вы можете использовать аналитическую функцию ROW_NUMBER()
для удаления дубликатов:
SELECT id, col2, col3
FROM (
SELECT id, col2, col3,
ROW_NUMBER() OVER ( PARTITION BY id ORDER BY priority ) AS rn
FROM (
select id, col2, col3, 1 AS priority
from table(p_package.getData(param))
UNION ALL
select id, col2, col3, 2
from table1
where col7 = 'pass'
and col8 <> 'A'
and col9 = to_date(Date, 'mm/dd/yyyy')
)
)
WHERE rn = 1
и в качестве бонуса, поскольку вы фильтруете дубликаты в другом месте, вы можете изменить UNION
наUNION ALL
.
Если вы можете иметь дубликаты id
значений из конвейерной функции и хотите, чтобы они были, но не любые из table1
, тогда:
SELECT id, col2, col3
FROM (
SELECT id, col2, col3, priority
ROW_NUMBER() OVER ( PARTITION BY id ORDER BY priority ) AS rn
FROM (
select id, col2, col3, 1 AS priority
from table(p_package.getData(param))
UNION ALL
select id, col2, col3, 2
from table1
where col7 = 'pass'
and col8 <> 'A'
and col9 = to_date(Date, 'mm/dd/yyyy')
)
)
WHERE priority = 1
OR rn = 1