WITH t1 AS ( SELECT 1 pk, '강감찬' 성명 FROM dual UNION ALL SELECT 2, '이순신' FROM dual ) , t2 AS ( SELECT '개발자' 직업, 1 fk FROM dual UNION ALL SELECT 'CEO' , 1 FROM dual UNION ALL SELECT 'DBA' , 2 FROM dual UNION ALL SELECT 'CISO' , 2 FROM dual UNION ALL SELECT 'PM' , 2 FROM dual ) , t3 AS ( SELECT '피아노' 취미, 1 fk FROM dual UNION ALL SELECT '태권도', 2 FROM dual UNION ALL SELECT '활쏘기', 2 FROM dual ) SELECT pk , rn , MIN(성명) 성명 , MIN(직업) 직업 , MIN(취미) 취미 FROM (SELECT pk , 1 rn , 성명 , '' 직업 , '' 취미 FROM t1 UNION ALL SELECT fk , ROW_NUMBER() OVER(PARTITION BY fk ORDER BY 1) rn , '' 성명 , 직업 , '' 취미 FROM t2 UNION ALL SELECT fk , ROW_NUMBER() OVER(PARTITION BY fk ORDER BY 1) rn , '' 성명 , '' 직업 , 취미 FROM t3 ) GROUP BY pk, rn ORDER BY pk, rn ;