안녕하세요..어제 질문을 올렸는데..제 DB에 적용이 안되서..약간 다른 방법으로 질문 드리고자 합니다
Table1 Table2
Age / Name Age / Name / School << Column Name
-----------------------------------------------------------------------------------------
10 / SJ 10 / SJ / PNU
20 / MK 20 / MK / HB
30 / LH 30 / LH / null
40 / MS 20 / MK / CU
40 / MK 20 /MS / null
50/ AA
이렇게 두개의 테이블이 있을때
조인을 하여 값을 보여주려고 하는데요
select a.Name ||'-'||a.Age as Profile , b.School from Table1 a , Table2 b 인데..
LH랑 MS는 School이 없어서 null로 나오게 하고싶은데..잘 안되네요..
Table1 에 있는 모든 Name값은 표시되었으면 좋겠고 그 값에 대응되는 Table2번에 School을 나오게 하고싶습니다.
null은 null로 하고...근데 데이터가 중복해서 나오기도 하고..엉망진창이네요..
답변 부탁드립니다~~
기대결과
Profile School
SJ-10 PNU
MK-20 HB,CU
LH-30 null
MS-40 null
MK-40 null
AA-50 null
with t1 (age, name) as ( select 10 , 'SJ' from dual union all select 20 , 'MK' from dual union all select 30 , 'LH' from dual union all select 40 , 'MS' from dual union all select 40 , 'MK' from dual union all select 50 , 'AA' from dual ), t2 (age,name,school) as ( select 10, 'SJ','PNU' from dual union all select 20, 'MK','HB' from dual union all select 30, 'LH',null from dual union all select 20, 'MK','CU' from dual union all select 20, 'MS',null from dual) SELECT PROFILE ,LISTAGG(SCHOOL, ',') WITHIN GROUP(ORDER BY PROFILE) AS SCHOOL FROM ( SELECT T1.NAME || '-' || T1.AGE AS PROFILE ,T2.SCHOOL FROM T1 T1 LEFT JOIN T2 T2 ON T2.AGE = T1.AGE AND T2.NAME = T1.NAME ) GROUP BY PROFILE ORDER BY SCHOOL