일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- jquery_cheat_sheet #jquery_quick_api_reference
- 근무날짜 경력계산
- 탭과 클릭 focus 이벤트 구분
- i_tail
- taglib 만들기
- 트리거 이벤트
- 전화번호 형식 자동 변환
- eclipse 다국어
- 허드슨 포트 변경
- 스킵 네비게이션
- 시퀀스 초기화 프로시져
- javascript Camel
- 엑셀 UPDATE
- eclipse properties
- Spring Annotation
- 여러줄 한줄로
- jQuery 백스페이스
- JSP Standard Tag Library (JSTL) Tutorial
- ajax 배열 파라미터
- javascript 낙타
- 뒤로가기 방지
- DIV 팝업 이외 영역 클릭 시 팝업 닫기
- ajax 배열
- 팝업 종료
- 화면보호기 실행 방지
- eclipse 폰트
- #오라클 데이터 복구
- 폴더만 남기고 파일만 삭제
- jquery_api #jquery #api
- css 말줄임
- Today
- Total
Hi~ Summers!!
세로->가로로 만드는 쿼리 본문
okjsp에 비슷한 질문이 연달아 올라와서 업무가 밀려있는데도 함 만들어보았다.
남은문서는 UI정의서,완료보고서...아자 힘내자 ㅠ
질문1)
[AAA]
num | name | id
1 가나다 id_a
2 바자가 id_b
[BBB]
num | id | sub_name
1 id_a aaa
2 id_a bbb
3 id_a ccc
4 id_b ddd
5 id_c eee
이런식의 테이블 구조가 있구여....
두개를 조인해서 결과물이
name | id | sub_name
가나다 id_a aaa, bbb, ccc
바자가 id_b ddd,eee
일케 나와야 하거등여....
오라클을 쓰는데 쿼리 하나로 저런 결과물을 낼 수 있을까요???
답변)
번쿼리는 dual 테이블을 이용해 가상데이터로 만들어본거구요.2번쿼리는 실제 테이블을 고려해 만들어본겁니다.--1번쿼리
select name,id,ltrim(max(sys_connect_by_path(sub_name,',')), ',') data
from
(
select name,id,sub_name,row_number() over(partition by name,id order by sub_name) rn from
(
select '가나다' name,'id_a' id,'aaa' sub_name from dual union all
select '가나다' name,'id_a' id,'bbb' sub_name from dual union all
select '가나다' name,'id_a' id,'ccc' sub_name from dual union all
select '바자가' name,'id_b' id,'ddd' sub_name from dual union all
select '바자가' name,'id_b' id,'eee' sub_name from dual
)
)
start with rn = 1
connect by prior name=name
and prior id = id
and prior rn = rn - 1
group by name,id
--2번쿼리
select name,id,ltrim(max(sys_connect_by_path(sub_name,',')), ',') data
from
(
select name,id,sub_name,row_number() over(partition by name,id order by sub_name) rn from
(
select a.name,a.id,b.sub_name from AAA a,BBB b
where a.id = b.id
)
)
start with rn = 1
connect by prior name=name
and prior id = id
and prior rn = rn - 1
group by name,id
질문2)
- A
|- B
|-C
이렇게 트리 구조가 있구여...
실제로 DB에는
id name p_id
1 A 0
2 B 1
3 C 2
이렇게 있습니다...
제가 구현하고 싶은것은
A > B > C 를 나오게 하고 싶은데
이걸 쿼리로 어떻게 구현할까요.
답변)
select ltrim(max(sys_connect_by_path(name,'>')), '>') data
from
(
select name,row_number() over(partition by '1' order by name) rn from
(
select 1 id,'A' name,0 p_id from dual union all
select 3 id,'C' name,2 p_id from dual union all
select 2 id,'B' name,1 p_id from dual union all
select 4 id,'D' name,3 p_id from dual
)
)
start with rn = 1
connect by prior rn = rn - 1
group by '1'
질문3)
no group name
1 A 홍길동
2 A 개나리
3 B 길말순
4 B 김철수
5 B 이영희
이렇게 데이터가 있고
group에 따라서 group에 있는 사람들을 나타내야 하는데 말이죠...
group names
A 홍길동, 개나리
B 김말순, 김철수, 이영희
이런식으로 결과값이 나와야 합니다...
DB는 오라클을 쓰고
group이나 name등은 갯수가 픽스된것이 아니고 다 틀립니다....
고수님들 도와주세요~~~ ㅡㅜ
답변)
select groups,ltrim(max(sys_connect_by_path(name,',')), ',') datafrom
(
select groups,name,row_number() over(partition by groups order by name) rn from
(
select 'A' groups,'홍길동' name from dual union all
select 'A' groups,'개나리' name from dual union all
select 'B' groups,'김말순' name from dual union all
select 'B' groups,'김철수' name from dual union all
select 'B' groups,'이영희' name from dual
)
)
start with rn = 1
connect by prior groups = groups
and prior rn = rn - 1
group by groups