database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 30812 게시물 읽기
No. 30812
[mysql] 행을 열로 변환 하는 방법 문의 드립니다.ㅠㅠ
작성자
장창영(jcy1980)
작성일
2014-12-19 18:35ⓒ
2014-12-19 18:36ⓜ
조회수
13,105

DB(MySql) 에서

 

cal1 cal2 cal3

---------------

1 2 3

a b c

A B C

 

 

로 들어가 있는 데이터를

 

1 a A

2 b B

3 c C

 

로 바꿔서 출력 하고 싶습니다

 

(1 2 3 부분은 월 이니 12개 고정 입니다.)

 

이 글에 대한 댓글이 총 1건 있습니다.

-- PIVOT(행을 열로) --
SELECT m
     , MIN(CASE idx WHEN 1 THEN v END) v1
     , MIN(CASE idx WHEN 2 THEN v END) v2
  FROM (-- UNPIVOT(열을 행으로) --
        SELECT a.idx
             , b.m
             , CASE b.m
               WHEN  1 THEN m01
               WHEN  2 THEN m02
               WHEN  3 THEN m03
               WHEN  4 THEN m04
               WHEN  5 THEN m05
               WHEN  6 THEN m06
               WHEN  7 THEN m07
               WHEN  8 THEN m08
               WHEN  9 THEN m09
               WHEN 10 THEN m10
               WHEN 11 THEN m11
               WHEN 12 THEN m12
                END v
          FROM (-- 원본 테이블 --
                SELECT 1 idx
                     , 'a' m01, 'b' m02, 'c' m03, 'd' m04, 'e' m05, 'f' m06
                     , 'g' m07, 'h' m08, 'i' m09, 'j' m10, 'k' m11, 'l' m12
                 UNION ALL
                SELECT 2
                     , 'A', 'B', 'C', 'D', 'E', 'F'
                     , 'G', 'H', 'I', 'J', 'K', 'L'
                ) a
             , (-- 복제용 테이블 --
                SELECT 1 m
                UNION ALL SELECT  2
                UNION ALL SELECT  3
                UNION ALL SELECT  4
                UNION ALL SELECT  5
                UNION ALL SELECT  6
                UNION ALL SELECT  7
                UNION ALL SELECT  8
                UNION ALL SELECT  9
                UNION ALL SELECT 10
                UNION ALL SELECT 11
                UNION ALL SELECT 12
                ) b
        ) c
 GROUP BY m
;


행을 열로 바꿀때 중요한 것은
열의 기준이 되는 값들의 종류와 갯수를 정확하게 알고 있어야 한다는 것입니다.
예를 들면 "월"을 기준으로 한다 라고 하면
그 값은 1 부터 12 까지 12개 라는 명확한 기준이 존재하는 거구요.
이렇게 기준이 명확할 경우 행을 12개의 열로 변환이 가능합니다.
반면에 그 기준이 명확하지 않은 경우? 갯수가 가변인 경우?
이 경우는 SQL만으로는 불가능 합니다.
동적SQL로 해야 하구요.

마농(manon94)님이 2014-12-22 13:30에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
30817읽지않은 게시물의 개수와 게시물 구하기 [1]
익명
2015-01-13
8488
30816데이터가 아래와 같이 있으면 중복안되게 출력하고 싶어요.ㅠㅠ [1]
정우혁
2014-12-30
8513
30815Mysql 업데이트 구문 관련해서 질문드립니다. [2]
손님
2014-12-22
8798
30812[mysql] 행을 열로 변환 하는 방법 문의 드립니다.ㅠㅠ [1]
장창영
2014-12-19
13105
30810user 권한에 따른 성능차이가 있을까요? [1]
송진석
2014-12-17
8123
30809SELECT 속도 때문에 질문드립니다. [1]
바카
2014-12-17
9289
30808검색 관련 질문입니다. [1]
yap
2014-12-16
8128
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다