오라클에서 3개의 row을 1개의 column으로 나오게 하는방법p546211 2006.09.09 16:38 |
답변 1 조회 1,836 |
---|
'갑' 이라는 사람의 담당간호사가 있고 질병이 여래개(고혈압,당뇨 등) 있을 때
sql 사용하여 조회시 예시1 같이 나오지 않고 예시2처럼 나오게 하는 방법은 없나요
예시1)
no 대상자 담당간호사 질병
1 갑 홍길동 고혈압
2 갑 홍길동 당뇨
예시2)
no 대상자 담당간호사 질병
1 갑 홍길동 고혈압/당뇨
의견 쓰기
질문자 채택된 경우, 추가 답변 등록이 불가합니다.
re: 오라클에서 3개의 row을 1개의 column으로 나오게 하는방법 |
|
---|
imsi 테이블에 담과 같은 샘플 로우를 넣어 보았습니다.
select * from imsi ;
NO TYPE NAME BYUNG
---------- -------------------- -------------------- ----------------------------------------
1 갑 영포 감기
2 갑 영포 몸살
3 갑 영포 충치
4 갑 금와 충치
5 갑 금와 당뇨
6 갑 주몽 과대망상증
7 갑 소서노 공주병
8 갑 소서노 공한증
9 갑 연타발 결벽증
10 갑 대소 정신착란
11 갑 대소 결핵
12 갑 대소 스트레스
13 갑 대소 흑사병
13 개의 행이 선택되었습니다.
그룹별 랭킹을 구합니다
select A.*, row_number() over(partition by name order by byung) CNT from imsi A;
NO TYPE NAME BYUNG CNT
---------- -------------------- -------------------- ---------------------------------------- ----------
5 갑 금와 당뇨 1
4 갑 금와 충치 2
11 갑 대소 결핵 1
12 갑 대소 스트레스 2
10 갑 대소 정신착란 3
13 갑 대소 흑사병 4
7 갑 소서노 공주병 1
8 갑 소서노 공한증 2
9 갑 연타발 결벽증 1
1 갑 영포 감기 1
2 갑 영포 몸살 2
3 갑 영포 충치 3
6 갑 주몽 과대망상증 1
13 개의 행이 선택되었습니다.
한 사람이 갖을 수 있는 질병의 갯 수 만큼 디코딩 합니다.
select type,name,decode(cnt,1,byung) ,
decode(cnt,2,byung) ,decode(cnt,3,byung) ,decode cnt,4,byung)
from (select A.*, row_number() over(partition by name order by byung) CNT from imsi A);
TYPE NAME DECODE(CNT,1,BYUNG) DECODE(CNT,2,BYUNG) DECODE(CNT,3,BYUNG) DECODE(CNT,4,BYUNG)
-------------------- -------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ----------------------------------------
갑 금와 당뇨
갑 금와 충치
갑 대소 결핵
갑 대소 스트레스
갑 대소 정신착란
갑 대소 흑사병
갑 소서노 공주병
갑 소서노 공한증
갑 연타발 결벽증
갑 영포 감기
갑 영포 몸살
갑 영포 충치
갑 주몽 과대망상증
13 개의 행이 선택되었습니다.
디코딩한 칼럼별로 그룹함수를 적용합니다.
select type,name,max(decode(cnt,1,byung)),max(decode(cnt,2,byung)),max(decode(cnt,3,byung)),max(decode(cnt,4,byung))
from (select A.*, row_number() over(partition by name order by byung) CNT from imsi A) group by TYPE,name ;
TYPE NAME MAX(DECODE(CNT,1,BYUNG)) MAX(DECODE(CNT,2,BYUNG)) MAX(DECODE(CNT,3,BYUNG)) MAX(DECODE(CNT,4,BYUNG))
-------------------- -------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ----------------------------------------
갑 소서노 공주병 공한증
갑 주몽 과대망상증
갑 대소 결핵 스트레스 정신착란 흑사병
갑 금와 당뇨 충치
갑 연타발 결벽증
갑 영포 감기 몸살 충치
6 개의 행이 선택되었습니다.
그 담에 필요한 컬럼들을 concatenation합니다....
돔이 되시길....
그룹함수는 조건에 맞는 로가 많을 경우 속도가 느려짐에 유의하시길....
'닷컴's_열공 > Database' 카테고리의 다른 글
Aqua Data Sudio 4.7.2 버전 (1) | 2009.01.28 |
---|---|
Aqua data studio 한글 깨짐 설정 (0) | 2009.01.28 |
SVN(SubVersioN) 서버 설치 및 사용방법 (0) | 2008.12.04 |
10g에서 group by 사용시 주의사항 (0) | 2008.07.29 |
MySQL 의 주요 SQL 문법 (0) | 2008.02.24 |