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 41640 게시물 읽기
No. 41640
쿼리질문합니다
작성자
초보
작성일
2018-10-05 00:07ⓒ
2018-10-05 00:10ⓜ
조회수
3,386

1)번 쿼리

DATE ID COL_NM1 COL_NM2

2018-10-02 A100 A  

2018-10-02 A100 B  

2018-10-02 A100 C  

2018-10-02 A100 D  

2018-10-02 A100   가

2018-10-02 A100   나

2018-10-02 A100   다

2018-10-02 A100   라

2018-10-02 A100   마

 

2)번 결과

DATE ID COL_NM1 COL_NM2

2018-10-02 A100 A 가

2018-10-02 A100 B 나

2018-10-02 A100 C 다

2018-10-02 A100 D 라

2018-10-02 A100   마

 

union으로 1)번 쿼리결과가 나왔는데요...

2)번 결과처럼 조정하려면 어떻게 할까요?

 

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

WITH t1 AS
(
SELECT '2018-10-02' dt, 'A100' id, 'A' nm  FROM dual
UNION ALL SELECT '2018-10-02', 'A100', 'B' FROM dual
UNION ALL SELECT '2018-10-02', 'A100', 'C' FROM dual
UNION ALL SELECT '2018-10-02', 'A100', 'D' FROM dual
)
, t2 AS
(
SELECT '2018-10-02' dt, 'A100' id, '가' nm  FROM dual
UNION ALL SELECT '2018-10-02', 'A100', '나' FROM dual
UNION ALL SELECT '2018-10-02', 'A100', '다' FROM dual
UNION ALL SELECT '2018-10-02', 'A100', '라' FROM dual
UNION ALL SELECT '2018-10-02', 'A100', '마' FROM dual
)
-- 0. row_number 를 이용해 연결고리를 만들어 주면 됩니다.
-- 1. union all & group by
SELECT dt
     , id
     , rn
     , MIN(nm1) nm1
     , MIN(nm2) nm2
  FROM (SELECT dt
             , id
             , nm nm1
             , '' nm2
             , ROW_NUMBER() OVER(PARTITION BY dt, id ORDER BY nm) rn
          FROM t1
         UNION ALL
        SELECT dt
             , id
             , '' nm1
             , nm nm2
             , ROW_NUMBER() OVER(PARTITION BY dt, id ORDER BY nm) rn
          FROM t2
        )
 GROUP BY dt, id, rn
 ORDER BY dt, id, rn
;
-- 2. union all & pivot
SELECT *
  FROM (SELECT 1 gb
             , dt
             , id
             , nm
             , ROW_NUMBER() OVER(PARTITION BY dt, id ORDER BY nm) rn
          FROM t1
         UNION ALL
        SELECT 2 gb
             , dt
             , id
             , nm
             , ROW_NUMBER() OVER(PARTITION BY dt, id ORDER BY nm) rn
          FROM t2
        )
 PIVOT (MIN(nm) FOR gb IN (1 nm1, 2 nm2))
 ORDER BY dt, id, rn
;
-- 3. full outer join
SELECT NVL(a.dt, b.dt) dt
     , NVL(a.id, b.id) id
     , NVL(a.rn, b.rn) rn
     , a.nm1
     , b.nm2
  FROM (SELECT dt
             , id
             , nm nm1
             , ROW_NUMBER() OVER(PARTITION BY dt, id ORDER BY nm) rn
          FROM t1
        ) a
  FULL OUTER JOIN
       (SELECT dt
             , id
             , nm nm2
             , ROW_NUMBER() OVER(PARTITION BY dt, id ORDER BY nm) rn
          FROM t2
        ) b
    ON a.dt = b.dt
   AND a.id = b.id
   AND a.rn = b.rn
 ORDER BY dt, id, rn
;

마농(manon94)님이 2018-10-05 09:02에 작성한 댓글입니다.
이 댓글은 2018-10-05 09:08에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
416431분,10분,1시간,7일 데이터 select [1]
김민수
2018-10-22
3014
41642통계쿼리 총합, 평균을 구하고 싶습니다.. [6]
k62511
2018-10-15
3777
41641무결성 제약 조건 [1]
kim
2018-10-12
3269
41640쿼리질문합니다 [1]
초보
2018-10-05
3386
41639NULL값과 특정값을 같이 조회하고 싶습니다 [1]
노진규
2018-10-02
3258
41638PL/SQL로 서버로직을 짜는게 그렇게 잘못된 일인가요? [3]
C++
2018-10-01
3271
41637SELECT에서의 NULL 때문에 계산이 오류가 납니다. [3]
애기씨
2018-10-01
3474
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다