다음과 같은 데이터가 있습니다.
WITH TEST AS
(
SELECT '1' ORD, 'CHAR' GRP, 'A' code FROM dual
UNION ALL SELECT '1' ORD,'CHAR' GRP, 'B' code FROM dual
UNION ALL SELECT '1' ORD,'CHAR' GRP, 'C' code FROM dual
UNION ALL SELECT '2' ORD,'NUM' GRP, '1' code FROM dual
UNION ALL SELECT '2' ORD,'NUM' GRP, '2' code FROM dual
UNION ALL SELECT '3' ORD,'KOR' GRP, '일' code FROM dual
UNION ALL SELECT '3' ORD,'KOR' GRP, '이' code FROM dual
UNION ALL SELECT '3' ORD,'KOR' GRP, '삼' code FROM dual
UNION ALL SELECT '3' ORD,'KOR' GRP, '사' code FROM dual
)
ORD 순으로 GRP별로 CODE 조합 데이터를 출력하고 싶습니다.
출력:
CODE
A-1-일
A-1-이
A-1-삼
A-1-사
A-2-일
A-2-이
A-2-삼
A-2-사
B-1-일
B-1-이
B-1-삼
B-1-사
B-2-일
B-2-이
B-2-삼
B-2-사
C-1-일
C-1-이
C-1-삼
C-1-사
C-2-일
C-2-이
C-2-삼
C-2-사
여기저기 찾아봤는데, 저렇게는 되질 않아서. 고수님들의 고견 부탁드립니다.
WITH TEST AS ( SELECT '1' ORD, 'CHAR' GRP, 'A' code FROM dual UNION ALL SELECT '1' ORD,'CHAR' GRP, 'B' code FROM dual UNION ALL SELECT '1' ORD,'CHAR' GRP, 'C' code FROM dual UNION ALL SELECT '2' ORD,'NUM' GRP, '1' code FROM dual UNION ALL SELECT '2' ORD,'NUM' GRP, '2' code FROM dual UNION ALL SELECT '3' ORD,'KOR' GRP, '일' code FROM dual UNION ALL SELECT '3' ORD,'KOR' GRP, '이' code FROM dual UNION ALL SELECT '3' ORD,'KOR' GRP, '삼' code FROM dual UNION ALL SELECT '3' ORD,'KOR' GRP, '사' code FROM dual ) SELECT a.code || '-' || b.code || '-' || c.code code FROM (SELECT * FROM TEST WHERE ord = 1) a , (SELECT * FROM TEST WHERE ord = 2) b , (SELECT * FROM TEST WHERE ord = 3) c
일, 이, 삼, 사 같은 경우에는 그냥 소트하면 한글 순이기 때문에 이것에 대한 처리를 좀 해주셔야할 것 같네요.
WITH TEST AS
(
SELECT '1' ORD, 'CHAR' GRP, 'A' code FROM dual
UNION ALL SELECT '1' ORD,'CHAR' GRP, 'B' code FROM dual
UNION ALL SELECT '1' ORD,'CHAR' GRP, 'C' code FROM dual
UNION ALL SELECT '2' ORD,'NUM' GRP, '1' code FROM dual
UNION ALL SELECT '2' ORD,'NUM' GRP, '2' code FROM dual
UNION ALL SELECT '3' ORD,'KOR' GRP, '일' code FROM dual
UNION ALL SELECT '3' ORD,'KOR' GRP, '이' code FROM dual
UNION ALL SELECT '3' ORD,'KOR' GRP, '삼' code FROM dual
UNION ALL SELECT '3' ORD,'KOR' GRP, '사' code FROM dual
)
select c.code||'-'||n.code||'-'||k.code
from
(select
grp,code
from test
where grp='CHAR') c,
(select
grp,code
from test
where grp='NUM') n,
(select
grp,code
from test
where grp='KOR') k
order by c.code,n.code,k.code;