何かが動作するはずです。実際の状況では、最初の2つのCTE(テスト用に追加したWITH句のサブクエリ)は必要ありません。
with
table1 (dataid, name, factor) as (
select 1, 'Ann' , 1 from dual union all
select 2, 'Kate' , 1 from dual union all
select 3, 'Piter', 1 from dual
),
table2 (dataid, name, factor) as (
select 1, 'John' , 2 from dual union all
select 6, 'Arse' , 2 from dual union all
select 3, 'Garry', 2 from dual
),
u (dataid, name, factor, source) as (
select dataid, name, factor, 1 from table1
union all
select dataid, name, factor, 2 from table2
),
z (dataid, name, factor) as (
select dataid, first_value(name) over (partition by dataid order by source),
factor
from u
)
select dataid, name,
listagg(factor, ',') within group (order by factor) as factor
from z
group by dataid, name
order by dataid
;
出力:
DATAID NAME FACTOR
------- ----- ---------
1 Ann 1,2
2 Kate 1
3 Piter 1,2
6 Arse 2
4 rows selected.
第二のテーブルからジョンとギャリーに何が起こりましたか? – mathguy
は関係ありません。アンとピーターの問題は、ジョンとギャリーはしません。 – ifuwannaride
次にUNIONは必要ありません。あなたの要件を明確にしてください。単純に(dataid、factor)のUNIONを実行していて、最初のテーブルが存在する場合はそれを選択し、存在しない場合は2番目のテーブルから取ります。 – mathguy