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 39715 게시물 읽기
No. 39715
비교하여 데이타 move??
작성자
제발
작성일
2012-10-31 07:11
조회수
5,822

안녕하세요..

고객의 요청이 많은 생각을 하게 합니다.

플젝 막바지에 뭔 일인지...휴~~

요구사항은 이렇습니다.

WITH JEBAL AS
(
  SELECT '20121030' AS MAKE_DATE,'01' AS MAKE_LINE, '66A' AS MODEL, 450  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121031' AS MAKE_DATE,'01' AS MAKE_LINE, '77A' AS MODEL, 900  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121031' AS MAKE_DATE,'01' AS MAKE_LINE, '88A' AS MODEL, 102  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121030' AS MAKE_DATE,'02' AS MAKE_LINE, '88A' AS MODEL, 205  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121031' AS MAKE_DATE,'02' AS MAKE_LINE, '66A' AS MODEL, 550  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121031' AS MAKE_DATE,'02' AS MAKE_LINE, '76A' AS MODEL, 120  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121031' AS MAKE_DATE,'02' AS MAKE_LINE, '36A' AS MODEL, 222  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121030' AS MAKE_DATE,'03' AS MAKE_LINE, '16B' AS MODEL, 650  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121031' AS MAKE_DATE,'03' AS MAKE_LINE, '16B' AS MODEL, 850  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121031' AS MAKE_DATE,'03' AS MAKE_LINE, '46B' AS MODEL, 750  AS MAKE_QTY FROM DUAL UNION ALL
  SELECT '20121031' AS MAKE_DATE,'03' AS MAKE_LINE, '56B' AS MODEL, 650  AS MAKE_QTY FROM DUAL
)
SELECT * FROM JEBAL

이런 데이터가 있습니다.

지금 까지 플젝에서 나온 결과를 간략히 정리 한 겁니다.

MAKE_DATE MAKE_LINE MODEL MAKE_QTY
20121030 01 66A 450
20121031 01 77A 900
20121031 01 88A 102
20121030 02 88A 205
20121031 02 66A 550
20121031 02 76A 120
20121031 02 36A 222
20121030 03 16B 650
20121031 03 16B 850
20121031 03 46B 750
20121031 03 56B 650

결과는 이렇게 나옵니다. 간단히 설명 드리자면

전날 결과와 현재 날짜를 비교하여 make_line별로 그룹핑하여 정렬한 것입니다.

이런 결과를 갖고 시연까지 했는데.. 요구사항이...

MAKE_DATE MAKE_LINE MODEL MAKE_QTY
20121030 01 66A 450
20121031 01 77A 900
20121031 01 88A 102
20121030 02 88A 205
20121031 02 66A 550
20121031 02 76A 120
20121031 02 36A 222
20121030 03 16B 650
20121031 03 16B 850
20121031 03 46B 750
20121031 03 56B 650

 

이와같이 2012년 10월 30일 01번 라인에 모델이 66A 존재 하는데...오늘 전체 데이터를

비교하여 같은 모델이 있으면 (빨간색 표시, 2012년 10월 31일 02번 라인에 모델이 66A 존재 )

MAKE_DATE MAKE_LINE MODEL MAKE_QTY
20121030 01 66A 450
20121031 01 66A 550
20121031 01 77A 900
20121031 01 88A 102
20121030 02 88A 205
20121031 02 66A 550
20121031 02 76A 120
20121031 02 36A 222
20121030 03 16B 650
20121031 03 16B 850
20121031 03 46B 750
20121031 03 56B 650

1번 라인에 붙여서 표현을 해달라네요... 말이 쉽지.. 지금 와서 구현이 안된다고 할수 도 없고...

어제 데이터를 갖고 다음날 같은 모델이 존재하면 그걸 찾아서 해당 라인에 붙여서 정렬?

이게 가능 할까요...????

부탁드리겠습니다...제발...

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

억지 규칙을 만드는 느낌인데요...모호한 부분이 있네요.
01 라인에만 해당되는 규칙인가요?
02 라인의 88A 에는 적용이 안되는 건가요? 03 라인은?
30일의 결과가 1건씩 밖에 없네요?
31일이 기준이 된다면? 여러건에 대해서는 어떻게 적용이 되나요?
같은 라인에 같은 코드가 있다면 어떻게 되나요?

마농(manon94)님이 2012-10-31 09:30에 작성한 댓글입니다.

1. 만약 01 라인에 66A  있고 전체 비교 하여 위 예시 되로 붙이고

    똑같이 02라인에 모델을 비교해서 붙이고,

즉, 전부 전용이 되는 겁니다.

그런데 붙이는 규칙은 처음 일치하는 라인에 붙이는것입니다.

2. 30일(전날) 데이터는 하나만 존재 합니다.(각 라인에)

     31일 기준은 아니고 30일 기준으로 삼고 있습니다.

3. 같은 라인에 같은 전날 모델이랑 31일 모델이랑 존재하면

    그대로 두면 된다고 합니다.

 

죄송합니다...

제발님이 2012-10-31 09:44에 작성한 댓글입니다. Edit

WITH jebal AS
(
SELECT '20121030' AS make_date, '01' AS make_line, '66A' AS model, 450 AS make_qty FROM dual
UNION ALL SELECT '20121031', '01', '77A', 900 FROM dual
UNION ALL SELECT '20121031', '01', '88A', 102 FROM dual
UNION ALL SELECT '20121030', '02', '88A', 205 FROM dual
UNION ALL SELECT '20121031', '02', '66A', 550 FROM dual
UNION ALL SELECT '20121031', '02', '76A', 120 FROM dual
UNION ALL SELECT '20121031', '02', '36A', 222 FROM dual
UNION ALL SELECT '20121030', '03', '16B', 650 FROM dual
UNION ALL SELECT '20121031', '03', '16B', 850 FROM dual
UNION ALL SELECT '20121031', '03', '46B', 750 FROM dual
UNION ALL SELECT '20121031', '03', '56B', 650 FROM dual
)
SELECT make_date
     , make_line
     , model
     , make_qty
     , null gubun
  FROM jebal
 UNION ALL
SELECT a.make_date
     , b.make_line
     , a.model
     , a.make_qty
     , 1 gubun
  FROM jebal a
     , jebal b
     , jebal c
 WHERE a.make_date    = '20121031'
   AND b.make_date    = '20121030'
   AND b.model        = a.model
   AND c.make_date(+) = '20121031'
   AND c.make_line(+) = b.make_line
   AND c.model    (+) = b.model
   AND c.model IS NULL
 ORDER BY make_line, make_date, gubun, model
;

마농(manon94)님이 2012-10-31 10:50에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39718날짜와 날짜 사이 구하는 쿼리 질문이요. [1]
오잉
2012-10-31
5478
39717소숫점 없애기 [1]
나재호
2012-10-31
4941
39716동적쿼리 참 어렵네요. 조금만 도와주세요. [1]
김기철
2012-10-31
6521
39715비교하여 데이타 move?? [3]
제발
2012-10-31
5822
39714윈도우 오라클 폴더째 이전 가능할까요?
이상진
2012-10-30
4788
39713[너무 급합니다.]SYS.AUD$ 테이블을 8192(으)로 SYSTEM 테이블스페이스에서 확장할 수 없습니다 [4]
김덕호
2012-10-30
9108
39712오라클 문법이 궁금해요
최승환
2012-10-30
5100
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다