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 39509 게시물 읽기
No. 39509
쿼리가 힘드네여..ㅠ
작성자
박진호(zooaak)
작성일
2012-06-26 17:01ⓒ
2012-06-27 09:23ⓜ
조회수
5,792

1. 년월

2. 날짜

3. 추가한컬럼

WITH test AS
 (
SELECT   '201206' as yyyyMM  ,1 as dd  ,100 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,2 as dd  ,100 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,3 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,4 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,5 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,6 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,7 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,8 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,8  as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,9  as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,10 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,11 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,12 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,13 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,14 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,15 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,16 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,17 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,18 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,19 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,20 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,21 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,22 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,23 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,24 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,25 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,26 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,27 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,28 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,29 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,30 as dd  ,200 as d2  FROM dual union ALL
  SELECT   '201206' as yyyyMM  ,31 as dd  ,200 as d2  FROM dual )
 SELECT *
  FROM       test A
         RIGHT OUTER JOIN
           (SELECT       LEVEL X
            FROM         DUAL
            CONNECT BY   LEVEL <= TO_CHAR (LAST_DAY (TO_DATE ('201206', 'yyyyMM')), 'DD')) D
         ON A.dd = D.X

기존에 이런식으로 한달기간만 보여주다가 d2라는 컬럼을 키로 추가해야되서..

d2 * 30(한달) 이런식으로 보여줘야되는데.. 생각보다 힘드네여..ㅠㅠ

쿼리좀 부탁드려요....

YYYYMM  DD  D2    X
201206   1   100  1
201206   2   100  2
201206   3    0  3
201206   4    0  4
201206   5    0  5
201206   6    0  6
           :
201206   30   0  30
201206   1    0  1
201206   2    0  2
201206   3   200  3
201206   4   200  4
201206   5   200  5
201206   6   300  6
201206   7   300  7
201206   9   300  9
           :
201206   30  300  30

 

 이런식의 결과로..D2가 가  한달치만큼 없는날은 0으로 채우고..

음..가능은한가요?

조언이라두 부탁드려요...

감사합니다

 

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

WITH test AS
 (
 SELECT   '201206' as yyyyMM  ,1 as dd  ,100 as d2  FROM dual union ALL
 SELECT   '201206' as yyyyMM  ,2 as dd  ,100 as d2  FROM dual union ALL
 SELECT   '201206' as yyyyMM  ,3 as dd  ,200 as d2  FROM dual union ALL
 SELECT   '201206' as yyyyMM  ,4 as dd  ,200 as d2  FROM dual union ALL
 SELECT   '201206' as yyyyMM  ,5 as dd  ,200 as d2  FROM dual union ALL
 SELECT   '201206' as yyyyMM  ,6 as dd  ,300 as d2  FROM dual union ALL
 SELECT   '201206' as yyyyMM  ,7 as dd  ,300 as d2  FROM dual union ALL
 SELECT   '201206' as yyyyMM  ,9 as dd  ,300 as d2  FROM dual
 )
,test_d2 as
(
select distinct
d2
from test
where yyyymm = '201206'
)
SELECT
'201206' YYYYMM
,D1.X DD
,D2.D2 D2
FROM
           (SELECT       LEVEL X
            FROM         DUAL
            CONNECT BY   LEVEL <= TO_CHAR (LAST_DAY (TO_DATE ('201206', 'yyyyMM')), 'DD')) D1
            CROSS JOIN TEST_D2 D2
LEFT OUTER JOIN TEST A
         ON (
         A.dd = D1.X
         AND A.D2 = D2.D2
         )
 

혹시 이걸 원하시는지요...

 

왕초보님이 2012-06-26 19:45에 작성한 댓글입니다. Edit

WITH test AS
(
SELECT '201206' yyyymm, 1 dd, 100 d2 FROM dual
UNION ALL SELECT '201206', 2, 100 FROM dual
UNION ALL SELECT '201206', 3, 200 FROM dual
UNION ALL SELECT '201206', 4, 200 FROM dual
UNION ALL SELECT '201206', 5, 200 FROM dual
UNION ALL SELECT '201206', 6, 300 FROM dual
UNION ALL SELECT '201206', 7, 300 FROM dual
UNION ALL SELECT '201206', 9, 300 FROM dual
)
SELECT *
  FROM (SELECT LEVEL X
          FROM dual
         CONNECT BY LEVEL <= TO_CHAR(LAST_DAY(TO_DATE('201206', 'yyyymm')), 'dd')
        ) d
  LEFT OUTER JOIN test a
  PARTITION BY (a.d2)
    ON a.dd = d.x
;

마농(manon94)님이 2012-06-27 09:12에 작성한 댓글입니다.

질문은 살짝 수정했는데..마농님이 답변주셨네여..

감사합니다~

댓글주신 왕초보님도 감사합니다~

 

박진호(zooaak)님이 2012-06-27 09:25에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39513[질문] 본말과 약어 혼용된 문자열에서 약어 변환하는 방법 문의 [2]
fly_sky
2012-06-29
3864
39512[질문] 저에게는 너무나도 어려운 쿼리 질문 입니다 ㅠㅠ [2]
솜사탕
2012-06-29
4610
39510코드값 맵핑 / 맵핑 관계 나타내는 방법 문의 [1]
쿼리OTL
2012-06-26
4382
39509쿼리가 힘드네여..ㅠ [3]
박진호
2012-06-26
5792
39507오라클 동시성 제어 질문(수강 신청 관련)
천정대
2012-06-25
5263
39506[오라클-쿼리문]필드에서 원하는 값을 추출을 하려는데 도움 부탁드립니다. [2]
신광열
2012-06-22
5154
3950510g 서버에서 익스포트한 덤프파일을 9i 서버로 임포트 가능한가요? [1]
때지
2012-06-21
4619
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다