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
운영게시판
최근게시물
Oracle Q&A 41451 게시물 읽기
No. 41451
한개컬럼에 나오게 하고 싶을때
작성자
꼭결과를
작성일
2017-08-18 15:18ⓒ
2017-08-18 17:26ⓜ
조회수
9,032

1. SHAK 테이블

UKID SNAME JUMIN_NO HAK_NO HAKGWA_CD

10726 홍길동 800512-2655111 1010 3130

10726 홍길동 800512-2655111 2020 7210

10809 홍길동 800512-2655112 1010 3130

 

2. SAYUNGJA 테이블

UKID SNAME JUMIN_NO EMAIL PHONE_NO LOGIN_ID

10726 홍길동 800512-2655111 aaa@aaa.com 000-111-222 test

10809 홍길동 800512-2655112 bbb@aaa.com 000-222-333 moon

 

3. 결과테이블

UKID SNAME JUMIN_NO EMAIL PHONE_NO LOGIN_ID

10726 홍길동 800512-2655111 aaa@aaa.com 000-111-222 test,moon

10809 홍길동 800512-2655112 bbb@aaa.com 000-222-333

 

(

오라클 10g 입니다.

이름, 생년월일 조건조회시 중복될 건은 많지 않고 많아야 3건미만입니다.)

저기 결과테이블에 LOGIN_ID에 결과셋의 모든 LOGIN_ID를 한꺼번에 출력하고 싶습니다.

이것저것 함수도 써봤는데..잘안되네요...

도와주세요...

 

 

with SHAK as(

select '10726' UKID, '홍길동' SNAME, '800512-2655111' JUMIN_NO, '1010' HAK_NO, '3130' HAKGWA_CD from dual

union all

select '10726' UKID, '홍길동' SNAME, '800512-2655111' JUMIN_NO, '2020' HAK_NO, '7210' HAKGWA_CD from dual

union all

select '10809' UKID, '홍길동' SNAME, '800512-2655112' JUMIN_NO, '1010' HAK_NO, '3130' HAKGWA_CD from dual

)

, SAYUNGJA AS

(

select '10726' UKID, '홍길동' SNAME, '800512-2655111' JUMIN_NO, 'aaa@aaa.com' EMAIL, '000-111-222' PHONE_NO, 'test' LOGIN_ID from dual

union all

select '10809' UKID, '홍길동' SNAME, '800512-2655112' JUMIN_NO, 'bbb@aaa.com' EMAIL, '000-222-333' PHONE_NO, 'moon' LOGIN_ID from dual

)

 

SELECT UKID, JUMIN_NO, SNAME, LOGIN_ID, HAK_NO, PHONE_NO, EMAIL

FROM (

SELECT A.UKID, A.JUMIN_NO, A.SNAME, A.LOGIN_ID, TO_CHAR(B.HAK_NO) HAK_NO, replace(A.PHONE_NO,'-','') PHONE_NO, A.EMAIL

,ROW_NUMBER () OVER ( PARTITION BY a.UKID||'-'||a.SNAME||'-'||a.JUMIN_NO ORDER BY a.UKID DESC ) rn

FROM SAYUNGJA A, SHAK B

WHERE A.UKID = B.UKID

AND TRIM(A.SNAME) = '홍길동'

AND SUBSTR(A.JUMIN_NO,1,6) = '800512'

) WHERE rn = 1

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

어찌어찌 막무가내로 sql를 짜면 원하는 결과는 나왔는데(rn으로 group by를 하니..).. 딱 깔끔하지않고 찜찜한 쿼리라 고수님들의 댓글 부탁드립니다.

꼭결과를님이 2017-08-18 17:36에 작성한 댓글입니다.
이 댓글은 2017-08-18 17:39에 마지막으로 수정되었습니다. Edit

LOGIN_ID만 한꺼번에 출력한다고 해서..

기존 SQL을 남기고 만들어 봤습니다. 그럼

 

with SHAK as(

 

select '10726' UKID, '홍길동' SNAME, '800512-2655111' JUMIN_NO, '1010' HAK_NO, '3130' HAKGWA_CD from dual

 

union all

 

select '10726' UKID, '홍길동' SNAME, '800512-2655111' JUMIN_NO, '2020' HAK_NO, '7210' HAKGWA_CD from dual

 

union all

 

select '10809' UKID, '홍길동' SNAME, '800512-2655112' JUMIN_NO, '1010' HAK_NO, '3130' HAKGWA_CD from dual

 

)

 

, SAYUNGJA AS

 

(

 

select '10726' UKID, '홍길동' SNAME, '800512-2655111' JUMIN_NO, 'aaa@aaa.com' EMAIL, '000-111-222' PHONE_NO, 'test' LOGIN_ID from dual

 

union all

 

select '10809' UKID, '홍길동' SNAME, '800512-2655112' JUMIN_NO, 'bbb@aaa.com' EMAIL, '000-222-333' PHONE_NO, 'moon' LOGIN_ID from dual

 

)

 

 

SELECT A.UKID, A.JUMIN_NO, A.SNAME, B.LOGIN_ID, A.HAK_NO, A.PHONE_NO, A.EMAIL

FROM (SELECT UKID, JUMIN_NO, SNAME, LOGIN_ID, HAK_NO, PHONE_NO, EMAIL

 

FROM (

 

SELECT A.UKID, A.JUMIN_NO, A.SNAME, A.LOGIN_ID, TO_CHAR(B.HAK_NO) HAK_NO, replace(A.PHONE_NO,'-','') PHONE_NO, A.EMAIL

 

,ROW_NUMBER () OVER ( PARTITION BY a.UKID||'-'||a.SNAME||'-'||a.JUMIN_NO ORDER BY a.UKID DESC ) rn

 

FROM SAYUNGJA A, SHAK B

 

WHERE A.UKID = B.UKID

 

AND TRIM(A.SNAME) = '홍길동'

 

AND SUBSTR(A.JUMIN_NO,1,6) = '800512'

 

) WHERE rn = 1) A,

(SELECT SNAME

, SUBSTR(

XMLAGG(

XMLELEMENT(COL ,',', LOGIN_ID) ORDER BY UKID).EXTRACT('//text()'

).GETSTRINGVAL()

, 2) LOGIN_ID

FROM SAYUNGJA

GROUP BY SNAME) B

WHERE A.SNAME = B.SNAME

 

 

UKID JUMIN_NO SNAME LOGIN_ID HAK_ PHONE_NO EMAIL

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

10726 800512-2655111 홍길동 test,moon 1010 000111222 aaa@aaa.com

10809 800512-2655112 홍길동 test,moon 1010 000222333 bbb@aaa.com

 

felcon00님이 2017-08-22 13:22에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41454level(?), rank(?) 트리구조 쿼리좀 부탁드립니다. [2]
airmanx
2017-08-31
5484
41453다른유형의 레코드형태를 어떻게 빨리 조회할 수 있을까요?
권순환
2017-08-23
5223
41452rman-00600
jjd
2017-08-22
5022
41451한개컬럼에 나오게 하고 싶을때 [2]
꼭결과를
2017-08-18
9032
41450오라클 유지보수 계약 문의.
지용이
2017-08-11
5386
41449Oracle 11g 리스너 문제 [2]
박태학
2017-08-10
5468
41448DB2 CONNECT_BY_ISLEAF 오류로인한문제;; [1]
초보입니다
2017-08-04
5614
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2022 DSN, All rights reserved.
작업시간: 0.066초, 이곳 서비스는
	PostgreSQL v14.2로 자료를 관리합니다