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 40027 게시물 읽기
No. 40027
쿼리 도움좀 부탁드립니다.
작성자
헤헤헤(hehehe2002)
작성일
2013-02-26 17:43
조회수
5,888

        대상 데이터                               결과 데이터

기준년월 |  부서    | 인원  | |       기준년월 |  부서    | 인원
201303   | 영업팀   | 23    | | >> 201303   | 재무팀   | 44 
201303   | 총무팀   | 11    | |      201303   | 영업팀   | 23 
201303   | 재무팀   | 44    | |      201303   | 총무팀   | 11 
-----------------------------------------------------------
201302   | 영업팀   | 11    | | >> 201302   | 재무팀   | 24 
201302   | 총무팀   | 21    | |      201302   | 영업팀   | 11 
201302   | 재무팀   | 24    | |      201302   | 총무팀   | 21 
-----------------------------------------------------------
201301   | 영업팀   | 12    | | >> 201301   | 재무팀   | 33 
201301   | 총무팀   | 44    | |      201301   | 영업팀   | 12 
201301   | 재무팀   | 33    | |      201301   | 총무팀   | 44 

     
최근 기준년월(201303)의 인원수가 가장 만은 부서 기준으로
데이터를 기준년월로 나누어 정렬하고 싶습니다.

효율적인 쿼리가 생각이 나지 않아
눈팅만 하다가 이렇게 부탁드게 되었습니다.

도움 좀 부탁드릴게요
 

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

WITH TBL AS (
SELECT '201303' YYMM ,'영업팀' DEPT ,23 CNT FROM DUAL UNION ALL
SELECT '201303' YYMM ,'총무팀' DEPT ,11 CNT FROM DUAL UNION ALL
SELECT '201303' YYMM ,'재무팀' DEPT ,44 CNT FROM DUAL UNION ALL
SELECT '201302' YYMM ,'영업팀' DEPT ,11 CNT FROM DUAL UNION ALL
SELECT '201302' YYMM ,'총무팀' DEPT ,21 CNT FROM DUAL UNION ALL
SELECT '201302' YYMM ,'재무팀' DEPT ,24 CNT FROM DUAL UNION ALL
SELECT '201301' YYMM ,'영업팀' DEPT ,12 CNT FROM DUAL UNION ALL
SELECT '201301' YYMM ,'총무팀' DEPT ,44 CNT FROM DUAL UNION ALL
SELECT '201301' YYMM ,'재무팀' DEPT ,33 CNT FROM DUAL
)
SELECT A.YYMM
      ,A.DEPT
      ,A.CNT
  FROM TBL A
      ,(
    SELECT DEPT
          ,ROW_NUMBER() OVER(ORDER BY CNT DESC) RSEQ
      FROM TBL
     WHERE YYMM = '201303' --조회범위의 TO YYMM
    ) B
 WHERE A.YYMM BETWEEN '201301' AND '201303' --조회범위
   AND B.DEPT(+) = A.DEPT
 ORDER BY A.YYMM DESC ,B.RSEQ   

손님이 2013-02-26 19:57에 작성한 댓글입니다. Edit

SELECT *
  FROM t
 ORDER BY yymm DESC
     , FIRST_VALUE(cnt) OVER(PARTITION BY dept ORDER BY yymm DESC) DESC
;

마농(manon94)님이 2013-02-27 08:20에 작성한 댓글입니다.

두분 답변 매우 감사합니다.

진행에 많은 도움이 되었습니다.

헤헤헤(hehehe2002)님이 2013-02-28 08:03에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40030rollup으로 소계 계산후 가로에 소계표시하기 [1]
소계
2013-02-27
6950
40029날짜 범위 중 구간에 해당하는 일수 구하는 방법? [1]
이한나
2013-02-27
6545
40028NOT EXISTS 사용시 ROWNUM = 1 활용 질문있습니다. [1]
CHO37
2013-02-27
6707
40027쿼리 도움좀 부탁드립니다. [3]
헤헤헤
2013-02-26
5888
40026쿼리가 간단할것 같았는데... [4]
한상원
2013-02-26
5586
40025서브커서 [2]
부탁합니다
2013-02-25
5551
40024ORA-00020 최대 프로세스 (%s) 수를 초과했습니다
전기영
2013-02-25
5837
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다