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 28833 게시물 읽기
No. 28833
요일부터 시작하는 달력을 만들고 싶습니다.
작성자
하종옥(yopme)
작성일
2006-11-23 17:43ⓒ
2006-11-23 17:44ⓜ
조회수
3,729

다른 분들이 올려주신 글을 봤는데 일요일부터가 아니라 요일부터 시작하는 쿼리를 만들려면 어떻게 해야하는지요?

예를 들어 2006 -11 이면


sun | mon | tue | wed | thu| fri | sat

                              1     2      3     4

 5       6        7  ......................


이렇게가 아니라...


 mon | tue | wed | thu| fri | sat | sun

                     1     2      3     4       5

   6        7  .    8     .....................


이렇게 나오도록여....


쉽게 바꿀 수 있을지 알았는데 잘 안되네여... 도움 바랍니다...^^



select

      WEEKS,

      sum(decode(D,'1', DAYNUM)) as SUN,

      sum(decode(D,'2', DAYNUM)) as MON,

      sum(decode(D,'3', DAYNUM)) as TUE,

      sum(decode(D,'4', DAYNUM)) as WED,

      sum(decode(D,'5', DAYNUM)) as THU,

      sum(decode(D,'6', DAYNUM)) as FRI,

      sum(decode(D,'7', DAYNUM)) as SAT

from (

  select

        ROWNUM                  as DAYNUM,

        to_char(to_date(b.YYMM||lpad(ROWNUM,2,'0'),'YYYYMMDD'), 'D') as D,

        cast(to_char(to_date(b.YYMM||lpad(rownum,2,'0'),'YYYYMMDD'), 'W') as number) +

        decode(

            sign(cast(to_char(to_date(b.YYMM||lpad(ROWNUM,2,'0'),'YYYYMMDD'), 'D') as NUMBER)

            -cast(to_char(to_date(b.YYMM||'01','YYYYMMDD'), 'D') as NUMBER)),

            0, -1, 1, -1, 0)  +1  as WEEKS

  from dual cross join (select '200611' as YYMM from dual) b

  connect by level<=to_number(to_char(last_day(to_date(b.YYMM,'YYYYMM')),'DD'))

)

group by WEEKS

이 글에 대한 댓글이 총 3건 있습니다.
select
      WEEKS,
      sum(decode(D,'2', DAYNUM)) as MON,
      sum(decode(D,'3', DAYNUM)) as TUE,
      sum(decode(D,'4', DAYNUM)) as WED,
      sum(decode(D,'5', DAYNUM)) as THU,
      sum(decode(D,'6', DAYNUM)) as FRI,
      sum(decode(D,'7', DAYNUM)) as SAT,
      sum(decode(D,'1', DAYNUM)) as SUN
from (
  select
        ROWNUM                  as DAYNUM,
        to_char(to_date(b.YYMM||lpad(ROWNUM,2,'0'),'YYYYMMDD'), 'D') as D,
        cast(to_char(to_date(b.YYMM||lpad(rownum,2,'0'),'YYYYMMDD'), 'W') as number) +
        decode(
            sign(decode(cast(to_char(to_date(b.YYMM||lpad(ROWNUM,2,'0'),'YYYYMMDD'), 'D') as NUMBER),1,8,cast(to_char(to_date(b.YYMM||lpad(ROWNUM,2,'0'),'YYYYMMDD'), 'D') as NUMBER))
            -cast(to_char(to_date(b.YYMM||'01','YYYYMMDD'), 'D') as NUMBER)),
            0, -1, 1, -1, 0)  +1  as WEEKS
  from dual cross join (select '200611' as YYMM from dual) b
  connect by level<=to_number(to_char(last_day(to_date(b.YYMM,'YYYYMM')),'DD'))
)
group by WEEKS
order by WEEKS;

이부분 수정해봤습니다.
익명님이 2006-11-23 18:23에 작성한 댓글입니다. Edit

이건 어떤가요?


http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=69 




SELECT   COUNT (*) OVER (ORDER BY week_grp) weeks

       , MIN (DECODE (days, 2, date#)) mon

       , MIN (DECODE (days, 3, date#)) tue

       , MIN (DECODE (days, 4, date#)) wed

       , MIN (DECODE (days, 5, date#)) thu

       , MIN (DECODE (days, 6, date#)) fri

       , MIN (DECODE (days, 7, date#)) sat

       , MIN (DECODE (days, 1, date#)) sun

    FROM (SELECT     TO_CHAR (base_mon + LEVEL - 1, 'd') days

                   , TO_CHAR (base_mon + LEVEL - 1, 'fmdd') date#

                   , TRUNC (base_mon + LEVEL - 1, 'iw') week_grp

                FROM (SELECT TO_DATE ('200611', 'yyyymm') base_mon

                        FROM DUAL)

          CONNECT BY base_mon + LEVEL - 1 <= LAST_DAY (base_mon))

GROUP BY week_grp




쏘쿨 - 꿈과 미래를 쿼리하는 곳

http://www.soqool.com 

SoQooL(김홍선)님이 2006-11-23 19:57에 작성한 댓글입니다.

아...감사합니다..

익명님, 쏘쿨님~~

첨에 익명님이 주신 쿼리로 바꿔보니 첫째주 일요일이 '1'일 일 경우
같은 라인에 표시가 되어서..

 ( 200610일 경우
  | 화  | 수 |  목 |  금 |  토 | 일
02  | 03  |  04 |  05 | 06 | 07 |  01
)
다시 쏘쿨님 쿼리처럼 바꾸니 제가 원하던 결과가 나와서 수정했습니다.

두 분 다 모두 감사합니다..

얼핏 간단할거 같은데 생각보다 쉽지 않더라구여....

또 한 수 배웁니다...

하종옥(yopme)님이 2006-11-27 17:06에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
28836sequence 관련 질문입니다. [1]
초보
2006-11-24
2299
28835Table Data_length 관련 질문 [1]
맑은하늘
2006-11-23
1506
28834Primary Key Partitioned Index 생성방법 두개의 차이점 질문입니다.
은지호
2006-11-23
2133
28833월요일부터 시작하는 달력을 만들고 싶습니다. [3]
하종옥
2006-11-23
3729
28832rollup 사용시 2건이상일때만 소계 보여주기. [4]
오태훈
2006-11-23
2825
28831Export 받을 때 링크가 걸린 synonym의 원본 테이블도 export되나요? [2]
김보원
2006-11-23
1711
28830쿼리 질문인데요.. [2]
김태혁
2006-11-23
1350
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.033초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다