행열 변환 문의 0 3 506

by 한만정도경영 [SQL Query] [2020.05.26 12:43:03]


example.PNG (15,984Bytes)

안녕하세요.  아래와 같이  열로 나오는 결과 값을   행 기준으로  오쪽으로 결과 값을  표기할 수 있을 지 문의드립니다.

도움 부탁드립니다.

감사합니다.

 

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

 

 

 

by 마농 [2020.05.26 14:21:12]

미국, 독일, 일본 이렇게 고정값으로 조회하는 거라면?
컬럼 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
;

 


by 마농 [2020.05.26 14:50:45]

구분 순서대로 나열한다면?

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
;

 


by 한만정도경영 [2020.05.26 15:56:30]

답변 감사합니다. 꾸벅^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입