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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
54 | 소계/합계 함께 보기 | 운영자 | 2002.09.18 | 3134 |
53 | 석차구하기 | 운영자 | 2002.09.18 | 2960 |
» | COLUMN을 ROW로 | 운영자 | 2002.09.18 | 6135 |
51 | 최대값과 최소값을 뺀 평균 | 운영자 | 2002.09.18 | 4177 |
50 | 누계를 구하는 또한가지 방법 | 운영자 | 2002.09.18 | 3209 |
49 | 그룹 단위별 일련번호 붙이기 | 운영자 | 2002.09.18 | 5754 |
48 | 부등호 조인 | 운영자 | 2002.09.18 | 56705 |
47 | 행렬(matrix)계산을위한 준비 | 운영자 | 2002.09.18 | 3061 |
46 | 최대값과 해당해의 다른값 가져오기 | 운영자 | 2002.09.18 | 3221 |
45 | DATA 병합 | 운영자 | 2002.09.18 | 2578 |
44 | 다수 NULL 허용 COLUMN의 명칭을 가져올때 | 운영자 | 2002.09.18 | 3732 |
43 | 수식이용 | 운영자 | 2002.09.18 | 2738 |
42 | JOIN과 SUBQUERY가 동일한 예제 | 운영자 | 2002.09.18 | 2950 |
41 | NULL과 0 의 AVG 차이 비교 | 운영자 | 2002.09.18 | 2875 |
40 | 고정된 Row 수 유지 | 운영자 | 2002.09.18 | 4228 |
39 | 두개 RECORD를 한행에 DISPLAY 시키기 | 운영자 | 2002.09.18 | 3162 |
38 | LENGTH/LENGTHB,SUBSTR/SUBSTRB,INSTR/INSTRB | 운영자 | 2002.09.18 | 4292 |
37 | 한줄에 2 ROW 보여주기 변형II | 운영자 | 2002.09.18 | 3109 |
36 | 상호간 OUTER 조인의 해결방안 | 운영자 | 2002.09.18 | 2941 |
35 | 선택적조인 | 운영자 | 2002.09.18 | 2961 |