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 40078 게시물 읽기
No. 40078
날짜 파라메터 값을 통해서 데이터 출력
작성자
바램
작성일
2013-03-28 19:46
조회수
6,798

장비를 관리하고 있는 테이블이 있을 때
장비입고날짜를 통해서 데이터를 출력해야 하는데요.

장비입고날짜의 파라메터 값이
2012~2012도 될 수 있고 2010~2013가 될 수도 있습니다.

만약 파라메터 값이 '2010', '2014'라면

select 장비명, 장비개수, 장비입고날짜 from 장비 where 장비입고날짜 BETWEEN '2010' AND '2014';

위와 같이 같이 셀렉트를 하는 경우 출력은 아래와 같이 되야 합니다.

장비명       year       cnt
A               2010        3
A               2011        1
A               2012        2
A               2013        4
B               2010        1
B               2011        0
B               2012        5
B               2013        2

파라메터 값이 어떤 경우에는 하나가 될 수 있고
여러 개가 될 수 있는 가변적인 상황인데요.

이런 방법으로 쿼리 할 수 있는 방법이 있을까요?
DB는 오라클입니다. 

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

 전 질문이 이해가 되지 않습니다 ㅜㅜ 

cReAm(catz)님이 2013-03-28 20:59에 작성한 댓글입니다.

쉽게 설명 드리면

select 장비명, 장비개수, 장비입고년도 from 장비 where 장비입고년도 BETWEEN '2010' AND '2014';

이렇게 셀렉트 하게 되면

장비명      장비개수      장비입고년도

A               1                  2010 

A               1                  2010

B               1                  2013

 

위와 같이 출력이 되는 데요.

필요한 쿼리는 장비가 입고 된 년도에 해당되는 장비명의 합계를 SUM 해서 출력하는데

쿼리 조건식에 들어갈 파라메터 값이 '2010', '2013'이라면

그 파라메터 값에 따라 SUM 값을 구해야 하는 겁니다.

이런 방식이 쿼리로 가능한지 문의 드립니다.

장비명        year             cnt
A                2010              3
A                2011              1
A                2012              2
A                2013              4
B                2010              1
B                2011              0
B                2012              5
B                2013              2

바램님이 2013-03-28 23:25에 작성한 댓글입니다.
이 댓글은 2013-03-28 23:26에 마지막으로 수정되었습니다. Edit

SELECT b.장비명, a.년도
     , NVL(b.개수, 0) 개수
  FROM (SELECT TO_CHAR('2010' + LEVEL - 1) 년도
          FROM dual
         CONNECT BY LEVEL <= '2014' - '2010' + 1
        ) a
  LEFT OUTER JOIN
       (SELECT 장비명, 장비입고년도
             , SUM(장비개수) 개수
          FROM 장비
         WHERE 장비입고년도 BETWEEN '2010' AND '2014'
         GROUP BY 장비명, 장비입고년도
       ) b
  PARTITION BY (b.장비명)
    ON (a.년도 = b.장비입고년도)
 ORDER BY b.장비명, a.년도
;

마농(manon94)님이 2013-03-29 08:33에 작성한 댓글입니다.

답변 감사드립니다. 테스트 해 봐야 겠네요. ^^

바램님이 2013-03-29 09:49에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40081실행계획이 이상하네요 ㅜㅜ;; [5]
하람
2013-04-01
5981
40080split 관련 문의입니다 (칼럼 내용 split 후 각각 레코드로 insert) [1]
푸하
2013-03-29
7190
40079그룹으로 묶을때 조언 부탁드립니다. [1]
이민우
2013-03-29
7345
40078날짜 파라메터 값을 통해서 데이터 출력 [4]
바램
2013-03-28
6798
400772가지 질문..ㅠ [4]
임서희
2013-03-28
6324
400769i export 11g import .. 문제. [2]
이유창
2013-03-28
6818
40075입고,출고,잔고 보여주기 [3]
자바천재
2013-03-28
6322
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다