Column을 Row로
조건.
TABLE : TEST11
KEY1 KEY2 FRE SUP JUN SEN
-------- --------------- --------- --------- --------- ---------
공과대학 항공우주공학과 120 140 140 120
공과대학 기계공학과 240 260 240 240
공과대학 조선공학과 118 138 136 126
공과대학 산업공학과 123 141 140 120
공과대학 전자공학과 126 141 140 128
공과대학 재료공학과 128 132 142 126
공과대학 화학공학과 122 141 141 122
공과대학 전기공학과 120 140 140 120
공과대학 컴퓨터공학과 124 145 142 121
공과대학 섬유공학과 126 144 140 120
공과대학 자동화공학과 122 142 144 125
공과대학 고분자공학과 121 142 143 124
문제.
TEST11에 있는 DATA가 위와같이 각 학년별 인원수를 보관하고 있다.
문제는 대학별/학과별/학년별 인원수로 보고싶다.
다음과 같이..
-------- --------------- ----- ------------------------------
공과대학 고분자공학과 1학년 121
공과대학 고분자공학과 2학년 142
공과대학 고분자공학과 3학년 143
공과대학 고분자공학과 4학년 124
공과대학 기계공학과 1학년 240
공과대학 기계공학과 2학년 260
공과대학 기계공학과 3학년 240
공과대학 기계공학과 4학년 240
공과대학 산업공학과 1학년 123
공과대학 산업공학과 2학년 141
공과대학 산업공학과 3학년 140
공과대학 산업공학과 4학년 120
공과대학 섬유공학과 1학년 126
공과대학 섬유공학과 2학년 144
공과대학 섬유공학과 3학년 140
공과대학 섬유공학과 4학년 120
공과대학 자동화공학과 1학년 122
공과대학 자동화공학과 2학년 142
공과대학 자동화공학과 3학년 144
공과대학 자동화공학과 4학년 125
점점점.....
생각.
COLUMN 에 보관된 정보를 ROW 형식으로 전환해서 보고자하는 경우가
흔히 발생한다.
어떻게 하면 DATA를 전환시킬 수 있을지 잠시 생각을 해보자.
엿보기.위와같은 경우는 4개의 COLUMN을 4개의 ROW로 바꿔야한다.
결국 1개의 RECORD가 4개의 RECORD로 늘어나면서
각 RECORD가 필요한 정보만 발췌해 가져야 한다.
뭐가 필요하겠는가?.
1개의 RECORD를 4번 읽기위한 방법을 먼저 찾아야 할 것이다.
그 방법을 찾았으면 한번씩 읽힐때마다 1번째는 1학년 정보만,
2번째는 2학년 정보만,3번째는 3학년 정보만,
4번째는 4학년 정보만을 읽어올 수 있는 방법만 찾으면 문제는
해결될듯하다.
해법.
생각을 했으면 단계별로 문제를 해결해보자,
단계1.먼저 1개의 RECORD정보를 4번읽는 방법으로 4개의 RECORD를
가진 TABLE과의 JOIN을 이용 DATA를 복제하는 방법을 쓸 수
있다.
FROM 절이 다음처럼 되면 될 것이다.
FROM TEST11,
(SELECT ROWNUM CNT
FROM USER_TABLES
WHERE ROWNUM < 5)
단계2.KEY1과 KEY2가 UNIQUE를 보장했지만 이제는 학년 정보가
COLUMN에서 RECORD로 내려가면서 학년정보도 UNIQUE 를
확보하기위한 KEY가 되어야한다,
JOIN된 후에 CNT 1과 JOIN이 된 RECORD는 1학년정보를
가져오고,
차례로 4는 4학년 정보를 가져온다.
3번째 KEY를 구성하기위한 문장은 다음처럼 될 것이다.
DECODE(CNT,1,'1학년',2,'2학년',3,'3학년',4,'4학년') KEY3
단계3.KEY 구성이 끝났으면 학년별 인원수 정보를 가공해야한다.
원리를 KEY3를 구성하는 방법과 같다.
DECODE(CNT,1,FRE,2,SUP,3,JUN,4,SEN)
단계4.문장전체를 붙여보자
SELECT KEY1,KEY2,
DECODE(CNT,1,'1학년',2,'2학년',3,'3학년',4,'4학년')
KEY3,
DECODE(CNT,1,FRE,2,SUP,3,JUN,4,SEN)
FROM TEST11,
(SELECT ROWNUM CNT
FROM USER_TABLES
WHERE ROWNUM < 5)
뒷풀이.
간단한 방법이다.
하지만 종종 부딪히는 문제다.
이런경우는 설계단계에서 고려를 해주면 편하게 해결될 부분이기도
하다.
하지만 반대의 경우도 흔하게 있다.
즉 ROW 형식을 COLUMN형식으로 바꿔야하는 경우이다.
크게 문제가 되는 부분은 아니지만 주로사용되는 방법으로 설계가
이루어지면
형식을 전환하는 번거로움을 많이 줄일 수 있을 듯하다.
[Home] [About Me] [Not Easy] [Hobby] [Advanced] [Hot Issue] [Basic]
조건.
TABLE : TEST11
KEY1 KEY2 FRE SUP JUN SEN
-------- --------------- --------- --------- --------- ---------
공과대학 항공우주공학과 120 140 140 120
공과대학 기계공학과 240 260 240 240
공과대학 조선공학과 118 138 136 126
공과대학 산업공학과 123 141 140 120
공과대학 전자공학과 126 141 140 128
공과대학 재료공학과 128 132 142 126
공과대학 화학공학과 122 141 141 122
공과대학 전기공학과 120 140 140 120
공과대학 컴퓨터공학과 124 145 142 121
공과대학 섬유공학과 126 144 140 120
공과대학 자동화공학과 122 142 144 125
공과대학 고분자공학과 121 142 143 124
문제.
TEST11에 있는 DATA가 위와같이 각 학년별 인원수를 보관하고 있다.
문제는 대학별/학과별/학년별 인원수로 보고싶다.
다음과 같이..
-------- --------------- ----- ------------------------------
공과대학 고분자공학과 1학년 121
공과대학 고분자공학과 2학년 142
공과대학 고분자공학과 3학년 143
공과대학 고분자공학과 4학년 124
공과대학 기계공학과 1학년 240
공과대학 기계공학과 2학년 260
공과대학 기계공학과 3학년 240
공과대학 기계공학과 4학년 240
공과대학 산업공학과 1학년 123
공과대학 산업공학과 2학년 141
공과대학 산업공학과 3학년 140
공과대학 산업공학과 4학년 120
공과대학 섬유공학과 1학년 126
공과대학 섬유공학과 2학년 144
공과대학 섬유공학과 3학년 140
공과대학 섬유공학과 4학년 120
공과대학 자동화공학과 1학년 122
공과대학 자동화공학과 2학년 142
공과대학 자동화공학과 3학년 144
공과대학 자동화공학과 4학년 125
점점점.....
생각.
COLUMN 에 보관된 정보를 ROW 형식으로 전환해서 보고자하는 경우가
흔히 발생한다.
어떻게 하면 DATA를 전환시킬 수 있을지 잠시 생각을 해보자.
엿보기.위와같은 경우는 4개의 COLUMN을 4개의 ROW로 바꿔야한다.
결국 1개의 RECORD가 4개의 RECORD로 늘어나면서
각 RECORD가 필요한 정보만 발췌해 가져야 한다.
뭐가 필요하겠는가?.
1개의 RECORD를 4번 읽기위한 방법을 먼저 찾아야 할 것이다.
그 방법을 찾았으면 한번씩 읽힐때마다 1번째는 1학년 정보만,
2번째는 2학년 정보만,3번째는 3학년 정보만,
4번째는 4학년 정보만을 읽어올 수 있는 방법만 찾으면 문제는
해결될듯하다.
해법.
생각을 했으면 단계별로 문제를 해결해보자,
단계1.먼저 1개의 RECORD정보를 4번읽는 방법으로 4개의 RECORD를
가진 TABLE과의 JOIN을 이용 DATA를 복제하는 방법을 쓸 수
있다.
FROM 절이 다음처럼 되면 될 것이다.
FROM TEST11,
(SELECT ROWNUM CNT
FROM USER_TABLES
WHERE ROWNUM < 5)
단계2.KEY1과 KEY2가 UNIQUE를 보장했지만 이제는 학년 정보가
COLUMN에서 RECORD로 내려가면서 학년정보도 UNIQUE 를
확보하기위한 KEY가 되어야한다,
JOIN된 후에 CNT 1과 JOIN이 된 RECORD는 1학년정보를
가져오고,
차례로 4는 4학년 정보를 가져온다.
3번째 KEY를 구성하기위한 문장은 다음처럼 될 것이다.
DECODE(CNT,1,'1학년',2,'2학년',3,'3학년',4,'4학년') KEY3
단계3.KEY 구성이 끝났으면 학년별 인원수 정보를 가공해야한다.
원리를 KEY3를 구성하는 방법과 같다.
DECODE(CNT,1,FRE,2,SUP,3,JUN,4,SEN)
단계4.문장전체를 붙여보자
SELECT KEY1,KEY2,
DECODE(CNT,1,'1학년',2,'2학년',3,'3학년',4,'4학년')
KEY3,
DECODE(CNT,1,FRE,2,SUP,3,JUN,4,SEN)
FROM TEST11,
(SELECT ROWNUM CNT
FROM USER_TABLES
WHERE ROWNUM < 5)
뒷풀이.
간단한 방법이다.
하지만 종종 부딪히는 문제다.
이런경우는 설계단계에서 고려를 해주면 편하게 해결될 부분이기도
하다.
하지만 반대의 경우도 흔하게 있다.
즉 ROW 형식을 COLUMN형식으로 바꿔야하는 경우이다.
크게 문제가 되는 부분은 아니지만 주로사용되는 방법으로 설계가
이루어지면
형식을 전환하는 번거로움을 많이 줄일 수 있을 듯하다.
[Home] [About Me] [Not Easy] [Hobby] [Advanced] [Hot Issue] [Basic]
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
86 | 중복 data를 찾아 한번만 display하는 방법 | 운영자 | 2002.11.23 | 3428 |
85 | 중복 data를 찾아 모두 display 하는 방법 | 운영자 | 2002.11.23 | 3070 |
84 | oracle의 procedure에서의 여러 리턴값의 활용 예 | 운영자 | 2002.10.18 | 8301 |
83 | 특정문자까지의 왼쪽 문자열 반환 function | 운영자 | 2002.10.18 | 4044 |
82 | 중복자료 확인 및 삭제 | 운영자 | 2002.09.25 | 3259 |
81 | RECORD단위 DATA를 COLUMN단위로 | 운영자 | 2002.09.18 | 3681 |
80 | 누계 COLUMN이 없는 TABLE에 누계 값을 보자 (부등호 JOIN) | 운영자 | 2002.09.18 | 5104 |
79 | 바로이전 ROW의 값을 참조하고자 할때 | 운영자 | 2002.09.18 | 8619 |
78 | 누계 COLUMN이 없는 TABLE에 누계 값을 보자 (IN-LINE VIEW) | 운영자 | 2002.09.18 | 3123 |
77 | 자기보다 작은값중 최대값 하나만 읽어오기 | 운영자 | 2002.09.18 | 4588 |
76 | DATA COPY를 이용한 QUERY | 운영자 | 2002.09.18 | 3186 |
75 | PARAMETER값 변경에따른 유연한 GROUP BY | 운영자 | 2002.09.18 | 4127 |
74 | PAIRWISE 와 NONPAIRWISE | 운영자 | 2002.09.18 | 2697 |
73 | 동일한 값 안보여주기 | 운영자 | 2002.09.18 | 2969 |
72 | 소계/합계 함께 보기 | 운영자 | 2002.09.18 | 3134 |
71 | 석차구하기 | 운영자 | 2002.09.18 | 2960 |
» | COLUMN을 ROW로 | 운영자 | 2002.09.18 | 6135 |
69 | 최대값과 최소값을 뺀 평균 | 운영자 | 2002.09.18 | 4177 |
68 | 누계를 구하는 또한가지 방법 | 운영자 | 2002.09.18 | 3209 |
67 | 그룹 단위별 일련번호 붙이기 | 운영자 | 2002.09.18 | 5754 |