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 38666 게시물 읽기
No. 38666
주별 테이터를 월별로 변환 쿼리를 부탁 드립니다.
작성자
성보현
작성일
2011-07-06 15:22ⓒ
2011-07-06 15:42ⓜ
조회수
5,894

PLNWEEK/QTY1/QTY2/QTY3

201109/10/20/30-(2011년09주)

201110/10/20/30

201111/10/20/30

201112/10/20/30

201113/10/20/30

201114/10/20/30

 

 

이런 주별 테이터를 월별 합계 테이터를 낼려하는데. 조언을 부탁 드립니다.

QTY값은 단순 7로 나눈 값을 월별 합계로 나오면 되는데.. 쿼리가 쉽지가 않네요

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

궁금한데요.

한주가 월이 넘어가는 경우는 어떡하나요?

만약 9주가 4월과 5월이 포함된다면..

복권인생님이 2011-07-06 16:10에 작성한 댓글입니다. Edit

9주차

4월에 3일

5월에 4일 이라고 예시를 들면

 

4월에 합을 구할때는 9주차의 qty값을 7로 나눠 3일의 합을 4월의 합계에 넣으면 되고

5월의 합은 9주차의 qty값을 7로 나눠 4일의 합계를 넣으면 됩니다.

 

ㅜㅜ

성보현님이 2011-07-06 16:48에 작성한 댓글입니다. Edit

좀더 명확하게 따지고 넘어가야만 답을 구할 수 있을 것 같습니다.
한주의 시작이 일요일인지, 월요일인지?
아니면 1월1일부터 1월7일까지를 1주차로 볼것인지?
일요일 기준일때, 올해 1월1일이 토요일인데 1월1일은 20011년 1주차인지?
아니면 1월2일부터가 1주차이고 1월1일은 전년도 마지막주차에 포함되야 하는지?
9주차를 예를 드셨는데 9주차면 2월과 3월에 걸릴수는 있어도
4월과 5월 사이에 걸릴일은 없죠.
예시자료도 명확하게 제시해 주셔야 합니다.
주차의 개념이 모호한 상태에서 쿼리 작성은 불가능 합니다.
우선 주차의 개념을 명확히 한 후에 접근하셔야 합니다.

마농(manon94)님이 2011-07-06 17:02에 작성한 댓글입니다.

한주시작은 일요일 기준입니다. 달력과 같습니다.

2011년 1월 1일이 토요일이면 그주가 1주차가 되면

1월 합계시 1주차의 하루치만 합산 하면 됩니다.

월 마지막 주차에 현월과 다음월이 걸리는 주차가 있으면

해당하는 날자의 마지막 날자까지 일자를 구해서 현월의 합계에 반영 하면 됩니다.

다음월 계산시는 1일이 시작되는 주차부터 일자를 구해서 다음월 합계에 반영 하면 됩니다.

 

문장력이 딸려 어떻게 문의 전달이 잘됬는지 모르겠습니다.

생각처럼 잘되지를 않네요. ㅜㅜ

성보현님이 2011-07-06 17:24에 작성한 댓글입니다. Edit

WITH t AS
(
SELECT '201109' plnweek, 10 qty1, 20 qty2, 30 qty3 FROM dual
UNION ALL SELECT '201110', 10, 20, 30 FROM dual
UNION ALL SELECT '201111', 10, 20, 30 FROM dual
UNION ALL SELECT '201112', 10, 20, 30 FROM dual
UNION ALL SELECT '201113', 10, 20, 30 FROM dual
UNION ALL SELECT '201114', 10, 20, 30 FROM dual
--UNION ALL SELECT '201101', 10, 20, 30 FROM dual
)
SELECT ym
     , SUM(qty1 * r) qty1
     , SUM(qty2 * r) qty2
     , SUM(qty3 * r) qty3
  FROM (
       SELECT plnweek
            , qty1, qty2, qty3
            , TO_CHAR(dt, 'yyyymm') ym
            , RATIO_TO_REPORT(COUNT(*)) OVER(PARTITION BY plnweek) r
         FROM (
              SELECT plnweek
                   , qty1, qty2, qty3
                   , TO_DATE(SUBSTR(plnweek, 1, 4) || '01', 'yyyymm')
                   + SUBSTR(plnweek, 5, 2) * 7
                   - TO_CHAR(TO_DATE(SUBSTR(plnweek,1,4)||'01','yyyymm'),'d')
                   + lv - 7
                  AS dt
                FROM t
                   , (SELECT level lv FROM dual CONNECT BY level <= 7)
               ORDER BY dt
              )
        WHERE SUBSTR(plnweek, 1, 4) = TO_CHAR(dt, 'yyyy')
        GROUP BY plnweek
            , qty1, qty2, qty3
            , TO_CHAR(dt, 'yyyymm')
       )
 GROUP BY ym
 ORDER BY ym
;

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

마농님 감사합니다.

 

쿼리 유용하게 쓰도록 하겠습니다. ^^;;

성보현님이 2011-07-07 07:54에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
38669(주)DB웍스 임직원 분들께 감사드립니다. [2]
사람넷
2011-07-07
5381
38668고수님들 Query부탁드립니다 [2]
jinkuidong
2011-07-06
4565
38667where 조건에 case when [3]
레이첼
2011-07-06
12347
38666주별 테이터를 월별로 변환 쿼리를 부탁 드립니다. [6]
성보현
2011-07-06
5894
38665[질문] 가끔씩 ora-12560 TNS 프로토콜 오류?
질문
2011-07-06
4583
38664컬럼 업데이트 시간알수 있을까요?
질럿
2011-07-06
3680
38663같은 레벨의 행인경우 순서 바꾸기 [3]
황순원
2011-07-05
5965
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다