날짜 출력 이요.... 0 23 139

by 즐라탄빡쳤다 [DB 기타] [2018.06.11 16:17:28]


제가 쿼리로 출력하고싶은것은

조회연월 YYYYMM                                                                              조회

일자 내국인 외국인
1주 2018-06-01 ~ 2018-06-02 45명 45명
2주 2018-06-03 ~ 2018-06-09 50명 50명
3주 2018-06-10 ~ 2018-06-16 60명 60명
4주 2018-06-17 ~ 2018-06-23 70명 67명
5주 2018-06-24 ~ 2018-06-30 45명 20명

테이블은 하나이고 

그 테이블(테이블명 : A(가정))에 날짜(컬럼)가 들어가있는데 YYYYMMDD로 들어가있습니다. 타입은 CHAR입니다.

그리고 내국인 외국인은 KOREAN, JAPAN이라는 컬럼에 일자별로 인원수가 들어가있습니다.

출력시 1주에는 1주의 합이 들어가야 합니다.

조회시 조건에 월별로 검색을 하여서6월달을 검색을하면 6월달 안에 있는 데이터가 전부 출력이됩니다.

그런데 제가 출력하고싶은건 상단의 표처럼 5월달을 기준으로 조회를하면 1주 년-월-일 ~ 년-월-일 이런식으로 출력이 가능하게끔하고싶습니다.

by 신이만든지기 [2018.06.11 16:25:44]

원본 데이터(source data)가 뭐였는지 알려주셔야 할 것 같네요.


by 즐라탄빡쳤다 [2018.06.11 16:26:46]

yyyy-mm-dd 이거 말씀하시는건가요?


by 신이만든지기 [2018.06.11 16:34:00]

가공 전 테이블 데이터요.

 


by 즐라탄빡쳤다 [2018.06.11 16:36:38]

YYYYMMDD 하나 있어요 데이터는


by 즐라탄빡쳤다 [2018.06.11 17:27:07]

해봤는데 날짜 주차가 뒤죽박죽이더라구요 ㅠㅠ그래도 출력하게 도와주셔서 감사합니다..ㅠㅠㅠ


by 마농 [2018.06.11 16:39:23]

1. 원본테이블로부터 자료를 뽑는 것인지?
2. 테이블 없이 입력 조건만 가지고 자료를 뽑는 것인지?
3. 원본테이블에서 입력조건을 걸고 자료를 뽑는 것인지?
4. 첫주의 시작 기준이 어떻게 되나요?
  - 6/1 이 첫주가 아닌 이유는?
  - 5월달의 첫주는 몇일에 시작할까요?


by 즐라탄빡쳤다 [2018.06.11 16:42:57]


1. 원본테이블에서 자료 뽑아요
2. 테이블 있습니다.
3. 입력조건 걸고 뽑아요.
4. 제가 잘못 질문했네요 첫주의 시작은 1일이 맞습니다. 
   다만 한주가 시작되는 기준이 일요일~토요일입니다!


by 신이만든지기 [2018.06.11 16:50:37]
SELECT TO_CHAR(TRUNC(YMD, 'DAY'), 'MM') || '월' "월"     
     , TO_CHAR(TRUNC(YMD, 'DAY'), 'W') || '주' "주"
     , TO_CHAR(TRUNC(YMD, 'DAY'), 'YYYY-MM-DD') || ' ~ ' || TO_CHAR(TRUNC(YMD+7, 'DAY'), 'YYYY-MM-DD') "기간"  
  FROM (SELECT TO_DATE( :YMD, 'YYYYMMDD' ) YMD FROM DUAL);

저는 2번 테이블없이 입력조건으로 자료를 뽑는 거라고 가정하고 작성한 쿼리입니다.


by 마농 [2018.06.11 16:50:25]

1. 원본 대비 결과표로 질문해 주세요.
2. 조건은 어떤 형태로 들어오나요?
3. 테이블 값은 자료형이 뭔가요?


by 즐라탄빡쳤다 [2018.06.11 17:22:55]

조건은 월단위로 들어옵니다!

CHAR타입입니다.


by 마농 [2018.06.11 17:57:34]

원본 대비 결과표로 질문해 주세요.


by 즐라탄빡쳤다 [2018.06.11 17:58:40]

죄송합니다. 원본대비 결과표라는 말이 이해가 안되서요.....


by 즐라탄빡쳤다 [2018.06.11 18:03:26]

글 다시 수정하였습니다.


by 마농 [2018.06.11 18:04:07]

샘플 데이터를 보여주세요.(표형태로)
1. 원본테이블 예시자료가 이렇게 있는데.
2. 이러이러한 조건을 주고 검색했을 때
3. 이러이러한 형태의 결과표가 나왔으면 좋겠다.
결과는 원본에 근거해서 나와야 합니다.
막연하게 질문하시면 답변드릴수가 없어요.


by 즐라탄빡쳤다 [2018.06.11 18:12:45]

수정하였습니다. ㅠㅠㅠ 감사합니다.


by 마농 [2018.06.11 18:16:30]

표형태로 질문해 달라고 하는 것은.
말로만 표현하면 모호한 부분이 많기 때문입니다.
예를 들면 6월 조회시
2주차엔 자료가 없을 때
  - 1,3 주만 나오면 되는지?
  - 1,2,3 주 다 나와야 하는지?
3주차에 일요일(10일)과 토요일(16일) 자료가 없을 때
  - 11 ~ 15 으로 나와야 하는지?
  - 10 ~ 16 으로 나와야 하는지?
원본 테이블이 뭘 의미하는지?
  - 원본 테이블에서 주별로 집계를 할 목적이라면? 테이블이 필요하지만?
  - 그냥 달력이 필요한 것이면? 원본 테이블이 없어도 되는데.


by 즐라탄빡쳤다 [2018.06.11 18:26:39]

자료가없다면 1주 3주 이런식으로 나와도 됩니다!

 

날짜는 만약 10일~16일사이에 하나라도 있으면 10일~16일로 표시되어야 합니다.

 

원본테이블은 집계용이 아니고 관람인원이 몇명인지 데이터만 있습니다. 일별로 


by 신이만든지기 [2018.06.11 18:43:51]
일자 내국인 외국인
20180601 45 45
20180603 50 50
20180611 60 60
20180623 70 67

원본 테이블이 이런형태로 생겼다는 말씀이신가요?

이걸 아래처럼 보여주고 싶다는 말씀이신가요?

일자 내국인 외국인
1주 2018-06-01 ~ 2018-06-02 45명 45명
2주 2018-06-03 ~ 2018-06-09 50명 50명
3주 2018-06-10 ~ 2018-06-16 60명 60명
4주 2018-06-17 ~ 2018-06-23 70명 67명
5주 2018-06-24 ~ 2018-06-30 45명 20명

by 즐라탄빡쳤다 [2018.06.11 19:01:54]
일자 내국인 외국인
20180603 20 10
20180604 15 20
20180605 32 20
20180606 25 25

이런식으로 되어있구요 

출력은

일자 내국인 외국인
1주 2018-06-03 ~ 2018-06-09 92 75

출력할 화면은  내국인의 1주 합계 외국인의 1주 합계 이런식으로 표기되어야 합니다!


by 마농 [2018.06.11 20:00:48]

최초 허술했던 질문에서 점차 가닥을 잡아가고 있네요.
정리해보면 : 일별 자료를 > 월조건으로 검색하여 > 주별로 집계해야 하는 문제입니다.
6/1 이 1주차라더니 다시 또 6/3 이 1주차가 되었네요?
왔다갔다 하지 마시고 중심을 잡아주세요.

SELECT (wdt - TRUNC(sdt, 'd')) / 7 + 1 w
     , TO_CHAR(GREATEST(wdt , sdt), 'yyyy-mm-dd') || ' ~ ' ||
       TO_CHAR(LEAST(wdt + 6, edt), 'yyyy-mm-dd') dt
     , SUM(korea) korea
     , SUM(japan) japan
  FROM (SELECT TRUNC(dt, 'mm') sdt  -- 월초
             , LAST_DAY(dt)    edt  -- 월말
             , TRUNC(dt, 'd')  wdt  -- 주초
             , korea
             , japan
          FROM (SELECT TO_DATE(ymd, 'yyyymmdd') dt
                     , korea
                     , japan
                  FROM t
                 WHERE ymd LIKE '201806%'
                )
        )
 GROUP BY sdt, edt, wdt
 ORDER BY w
;

 

 


by 즐라탄빡쳤다 [2018.06.11 20:19:57]

감사합니다.  그런데 데이터가 없는 주에도 없더라도 

1주 2018-06-01 ~ 2018-06-02 0 0
2주 2018-06-03 ~ 2018-06-09 50 45
3주 2018-06-10 ~ 2018-06-16 0 0
4주 2018-06-17 ~ 2018-06-23 0 0
5주 2018-06-24 ~ 2018-06-30 0 0

이런식으로 데이터가 없어도 1주~5주는 표기가 되고 날짜도 표기되는 방식으로요! 마지막으로 한번만 부탁드립니다. 죄송합니다.....


by 마농 [2018.06.11 20:45:00]
SELECT a.w, a.sdt, a.edt
     , NVL(SUM(b.korea), 0) korea
     , NVL(SUM(b.japan), 0) japan
  FROM (SELECT (wdt - TRUNC(sdt, 'd')) / 7 + 1 w
             , TO_CHAR(GREATEST(wdt , sdt), 'yyyymmdd') sdt
             , TO_CHAR(LEAST(wdt + 6, edt), 'yyyymmdd') edt
             , TO_CHAR(dt, 'yyyymmdd') ymd
          FROM (SELECT sdt + LEVEL - 1 dt
                     , TRUNC(sdt + LEVEL - 1, 'd') wdt
                     , sdt
                     , LAST_DAY(sdt) edt
                  FROM (SELECT TO_DATE('201806', 'yyyymm') sdt FROM dual)
                 CONNECT BY LEVEL <= LAST_DAY(sdt) - sdt + 1
                )
        ) a
  LEFT OUTER JOIN t b
    ON a.ymd = b.ymd
 GROUP BY a.w, a.sdt, a.edt
 ORDER BY a.w
;

 


by 즐라탄빡쳤다 [2018.06.11 20:47:47]

정말 감사드립니다 ㅠㅠㅠㅠㅠㅠ 은인이세여 ㅠㅠㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입