■ 기초데이터
| 회사 | 조직 | 그룹 | 팀 |
| COMPANY | ORGANIZATION | GROUP_A1 | TEAM_A1 |
| COMPANY | ORGANIZATION | GROUP_A1 | TEAM_A2 |
| COMPANY | ORGANIZATION | GROUP_A1 | TEAM_A3 |
| COMPANY | ORGANIZATION | GROUP_A1 | TEAM_A4 |
| COMPANY | ORGANIZATION | GROUP_A1 | TEAM_A5 |
| COMPANY | ORGANIZATION | GROUP_A1 | TEAM_A6 |
| COMPANY | ORGANIZATION | GROUP_A1 | TEAM_A7 |
| COMPANY | ORGANIZATION | GROUP_A2 | TEAM_B1 |
| COMPANY | ORGANIZATION | GROUP_A2 | TEAM_B3 |
| COMPANY | ORGANIZATION | GROUP_A2 | TEAM_B4 |
| COMPANY | ORGANIZATION | GROUP_A3 | TEAM_C1 |
| COMPANY | ORGANIZATION | GROUP_A3 | TEAM_C2 |
| COMPANY | ORGANIZATION | GROUP_A3 | TEAM_D1 |
| COMPANY | ORGANIZATION | GROUP_A3 | TEAM_D2 |
| COMPANY | ORGANIZATION | GROUP_A3 | TEAM_D3 |
| COMPANY | ORGANIZATION | GROUP_A3 | TEAM_D4 |
| COMPANY | ORGANIZATION | GROUP_A3 | TEAM_D5 |
| COMPANY | ORGANIZATION | GROUP_A3 | TEAM_D6 |
■ 최종데이터 표시
| COMPANY | |||
| ORGANIZATION | |||
| GROUP_A1 | GROUP_A2 | GROUP_A3 | GROUP_A4 |
| TEAM_A1 | TEAM_B1 | TEAM_C1 | TEAM_D1 |
| TEAM_A2 | TEAM_B3 | TEAM_C2 | TEAM_D2 |
| TEAM_A3 | TEAM_B4 | TEAM_D3 | |
| TEAM_A4 | TEAM_D4 | ||
| TEAM_A5 | TEAM_D5 | ||
| TEAM_A6 | TEAM_D6 | ||
| TEAM_A7 | |||
WITH t AS
(
SELECT 'COMPANY' com, 'ORGANIZATION' org, 'GROUP_A1' grp, 'TEAM_A1' team FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A1', 'TEAM_A2' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A1', 'TEAM_A3' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A1', 'TEAM_A4' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A1', 'TEAM_A5' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A1', 'TEAM_A6' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A1', 'TEAM_A7' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A2', 'TEAM_B1' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A2', 'TEAM_B3' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A2', 'TEAM_B4' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A3', 'TEAM_C1' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A3', 'TEAM_C2' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A4', 'TEAM_D1' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A4', 'TEAM_D2' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A4', 'TEAM_D3' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A4', 'TEAM_D4' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A4', 'TEAM_D5' FROM dual
UNION ALL SELECT 'COMPANY', 'ORGANIZATION', 'GROUP_A4', 'TEAM_D6' FROM dual
)
SELECT NVL2(rn, MIN(DECODE(dr, 1, v)), NVL(org, com)) grp_1
, NVL2(rn, MIN(DECODE(dr, 2, v)), '') grp_2
, NVL2(rn, MIN(DECODE(dr, 3, v)), '') grp_3
, NVL2(rn, MIN(DECODE(dr, 4, v)), '') grp_4
FROM (SELECT com
, org
, NVL(team, grp) v
, DENSE_RANK() OVER(PARTITION BY com, org ORDER BY grp) dr
, ROW_NUMBER() OVER(PARTITION BY com, org, grp ORDER BY team NULLS FIRST) rn
FROM t
GROUP BY com, org, grp, ROLLUP(team)
) a
GROUP BY com, ROLLUP(org, rn)
ORDER BY com, org NULLS FIRST, rn NULLS FIRST
;
역시 간결하게 아주 잘 작성하셨네요.
또 한번 배우고 갑니다.