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 41189 게시물 읽기
No. 41189
두개의 테이블 검색(도움요청)
작성자
염진호(bboyjino)
작성일
2016-06-29 16:00
조회수
7,490

TABLE A

- CODE

- STARTDT

- ENDDT

- PAY

- COMMENT

 

1111 | 20160101 | 20160120 | 200000 | 코멘트

2222 | 20160101 | 20160120 | 300000 | 코멘트

3333 | 20160101 | 20160120 | 400000 | 코멘트

1111 | 20160201 | 20160220 | 200000 | 코멘트

2222 | 20160201 | 20160220 | 300000 | 코멘트

3333 | 20160201 | 20160220 | 400000 | 코멘트

...

 

TABLE B

- CODE

- STARTDT

- PAY

- COMMENT

 

1111 | 20160101 | 2000 | 코멘트

1111 | 20160102 | 3000 | 코멘트

1111 | 20160103 | 4000 | 코멘트

...

2222 | 20160101 | 5600 | 코멘트

2222 | 20160102 | 4000 | 코멘트

2222 | 20160103 | 2000 | 코멘트

...

3333 | 20160101 | 5600 | 코멘트

3333 | 20160102 | 4000 | 코멘트

3333 | 20160103 | 2000 | 코멘트

 

B 테이블 내용을 그룹화 하여 테이블 A의 내용을 생성하였습니다.

A 테이블의 STARTDT - ENDDT 는 기간을 정해두었으며, 기간이외 데이터 또한 B테이블에 있습니다.

그 이외 데이터를 분리하여 아래와 같은 내용으로 출력하고 싶습니다.

 

1111 | 20160101 ~ 20160120 | 200000 | 완료된것

1111 | 20160121 ~ 20160131 | 11111 | 미완료

2222 | 20160101 ~ 20160120 | 300000 | 완료된것

2222 | 20160121 ~ 20160131 | 22222 | 미완료

3333 | 20160101 ~ 20160120 | 400000 | 완료된것

3333 | 20160121 ~ 20160131 | 33333 | 미완료

...

 

UNION 을 사용해야 하는걸까요 ?

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

SELECT code
     , DECODE(gb, 1, '20160101', '20160121') startdt
     , DECODE(gb, 1, '20160120', '20160131') enddt
     , SUM(pay) pay
     , DECODE(gb, 1, '완료된것', '미완료') comment
  FROM (SELECT code, pay
             , CASE WHEN startdt < '20160121' THEN 1 ELSE 2 END gb
          FROM b
         WHERE startdt BETWEEN '20160101' AND '20160131'
        )
 GROUP BY code, gb
 ORDER BY code, gb
;


SELECT code
     , startdt
     , enddt
     , pay
     , '완료된것' comment
  FROM a
 WHERE startdt = '20160101'
   AND enddt   = '20160120'
 UNION ALL
SELECT code
     , '20160121' startdt
     , '20160131' enddt
     , SUM(pay)   pay
     , '미완료'   comment
  FROM b
 WHERE startdt BETWEEN '20160121' AND '20160131'
 GROUP BY code
 ORDER BY code, startdt
;

마농(manon94)님이 2016-06-30 08:54에 작성한 댓글입니다.
이 댓글은 2016-06-30 08:54에 마지막으로 수정되었습니다.

댓글 감사합니다 ^^

근데요.

enddt 의 일자가 고정적인것이 아니라서요.

A 테이블의 데이터는 B 테이블의 내용을 취합한것입니다.

B 테이블의 일정한 기간을 그룹화시켜 A 테이블 내용을 만든것입니다.

A 테이블의 STARTDATE ~ ENDDATE 는 B 테이블의 특정한 날짜에 대한 그룹기간 일자.

B 테이블에서는 A 테이블의 ENDDATE 보다 해당월에 큰 날짜로 된것을 그룹화.

 

결과 =

A TABLE 1ROWS, 완료

B TABLE 1ROWS, 미완료

.

.

이런식으로요.. 요로케는 안될까요 .. ?

데이터 베이스 구조적인 문제도 빼놓을순 없지만, 이미 짜여진 구조를 건드릴수

없는 입장이라, 며칠간 계속 요고만 가지고 머리 짜고 있네요.ㅠ

염진호(bboyjino)님이 2016-07-01 10:33에 작성한 댓글입니다.

SELECT code
     , startdt
     , enddt
     , pay
     , '완료된것' comment
  FROM a
 UNION ALL
SELECT b.code
     , TO_CHAR(TO_DATE(a.end_dt, 'yyyymmdd') + 1, 'yyyymmdd') startdt
     , '????????' enddt
     , SUM(b.pay)   pay
     , '미완료'   comment
  FROM a
     , b
 WHERE b.code    = a.code
   AND b.startdt > a.end_dt
 GROUP BY b.code
 ORDER BY code, startdt
;

마농(manon94)님이 2016-07-01 10:52에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41192오라클 쿼리에 버그가 있네요... [1]
김흥수
2016-07-03
7377
41191update sql 퀴즈입니다. [2]
김흥수
2016-06-30
7338
41190이 sql 의 문제 무엇일까요. 의견부탁드려요. [2]
니노
2016-06-29
7310
41189두개의 테이블 검색(도움요청) [3]
염진호
2016-06-29
7490
41188실용성이 있는 SQL 퀴즈입니다. ^^ [3]
김흥수
2016-06-24
10530
41187아카이브 로그파일 위치 변경 . [1]
dba
2016-06-23
7613
41186비정상데이터 connect by 조회가능할까요. [1]
김정묵
2016-06-23
7394
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다