해당 형태로 데이터 표시가 가능할까요? 0 562

by 메시 [SQL Query] [2025.09.11 10:32:58]


■ 기초데이터

회사 조직 그룹
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      
by 마농 [2025.09.12 09:27:00]
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
;

 


by 메시 [2025.09.12 10:13:53]

역시 간결하게 아주 잘 작성하셨네요.

또 한번 배우고 갑니다.