안녕하세요. 아래와 같이 열로 나오는 결과 값을 행 기준으로 오쪽으로 결과 값을 표기할 수 있을 지 문의드립니다.
도움 부탁드립니다.
감사합니다.
select '미국' "gubun" ,'chevrolet' "brand" from dual
union all
select '미국' "gubun" ,'ford' "brand" from dual
union all
select '미국' "gubun" ,'gm' "brand" from dual
union all
select '독일' "gubun" ,'benz' "brand" from dual
union all
select '독일' "gubun" ,'bmw' "brand" from dual
union all
select '독일' "gubun" ,'vw' "brand" from dual
union all
select '독일' "gubun" ,'audi' "brand" from dual
union all
select '일본' "gubun",'suzuki' "brand1" from dual
union all
select '일본' "gubun",'toyota' "brand1" from dual
union all
select '일본' "gubun",'honda' "brand1" from dual
union all
select '일본' "gubun",'yamaha' "brand1" from dual
미국, 독일, 일본 이렇게 고정값으로 조회하는 거라면?
컬럼 6개가 아닌 3개만으로 표현하면 될 것 같습니다.
WITH t AS ( SELECT '미국' gubun, 'chevrolet' brand FROM dual UNION ALL SELECT '미국', 'ford' FROM dual UNION ALL SELECT '미국', 'gm' FROM dual UNION ALL SELECT '독일', 'benz' FROM dual UNION ALL SELECT '독일', 'bmw' FROM dual UNION ALL SELECT '독일', 'vw' FROM dual UNION ALL SELECT '독일', 'audi' FROM dual UNION ALL SELECT '일본', 'suzuki' FROM dual UNION ALL SELECT '일본', 'toyota' FROM dual UNION ALL SELECT '일본', 'honda' FROM dual UNION ALL SELECT '일본', 'yamaha' FROM dual ) SELECT rn , MIN(DECODE(gubun, '미국', brand)) 미국 , MIN(DECODE(gubun, '독일', brand)) 독일 , MIN(DECODE(gubun, '일본', brand)) 일본 FROM (SELECT gubun, brand , ROW_NUMBER() OVER(PARTITION BY gubun ORDER BY brand) rn FROM t ) GROUP BY rn ORDER BY rn ;
구분 순서대로 나열한다면?
WITH t AS ( SELECT '미국' gubun, 'chevrolet' brand FROM dual UNION ALL SELECT '미국', 'ford' FROM dual UNION ALL SELECT '미국', 'gm' FROM dual UNION ALL SELECT '독일', 'benz' FROM dual UNION ALL SELECT '독일', 'bmw' FROM dual UNION ALL SELECT '독일', 'vw' FROM dual UNION ALL SELECT '독일', 'audi' FROM dual UNION ALL SELECT '일본', 'suzuki' FROM dual UNION ALL SELECT '일본', 'toyota' FROM dual UNION ALL SELECT '일본', 'honda' FROM dual UNION ALL SELECT '일본', 'yamaha' FROM dual ) SELECT rn , MIN(DECODE(dr, 1, gubun)) gubun_1 , MIN(DECODE(dr, 1, brand)) brand_1 , MIN(DECODE(dr, 2, gubun)) gubun_2 , MIN(DECODE(dr, 2, brand)) brand_2 , MIN(DECODE(dr, 3, gubun)) gubun_3 , MIN(DECODE(dr, 3, brand)) brand_3 -- , MIN(DECODE(dr, 4, gubun)) gubun_4 -- , MIN(DECODE(dr, 4, brand)) brand_4 FROM (SELECT gubun, brand , DENSE_RANK() OVER(ORDER BY gubun) dr , ROW_NUMBER() OVER(PARTITION BY gubun ORDER BY brand) rn FROM t ) GROUP BY rn ORDER BY rn ;