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 40956 게시물 읽기
No. 40956
기준율을 적용해서 업체별 순위를 표시하고 싶습니다.
작성자
써니
작성일
2015-10-02 18:02ⓒ
2015-10-02 19:01ⓜ
조회수
9,309

테이블A

NO COUNT LOWER_BND
A001 1 80

 테이블B

NO COUNT I_NO AMT
A001 1 1 1000
A001 1 2 3000

테이블C 
 

NO COUNT SEQ VENDOR AMT
A001 1 1 A1 3000
A001 1 1 A2 1000
A001 1 1 A3 4000

B테이블의 SUM에 대한 하한율(A.LOWER_BND)을 적용하면 3200일때
최종 SEQ에 대해서 C테이블 각 VENDOR의 AMT 순위와 탈락여부를 표시하고 싶습니다.
1개의 COUNT에 대햇 SEQ는 계속 증가할수 있고 최대 10까지 옆으로 나열해서 보여질 예정입니다.

결과

순위 NO SEQ VENDOR AMT SEQ VENDOR AMT SEQ VENDOR AMT
1 A001 1 A2 1000 2  A1  1000 3    
2 A001 1 A1 3000 2  A2  1100 3    
탈락 A001 1 A3 4000 2  A3  3500 3    

도와주세요.

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

실력이 변변치 못해 좀 긴데,이해 바랍니다.

마농님을 비롯한 다른 실력 좋으신 분들의 조언을 들어보세요.

RANK부분에 오류가 있어 수정합니다.

11G부터는 PIVOT을 지원한다고 하니 사용하면 라인수가 줄어 들겠네요.

WITH

A(NO,COUNT,LOWER_BND)
AS
(
SELECT 'A001',1,80 FROM DUAL
),
B(NO,COUNT,I_NO,AMT)
AS
(
SELECT 'A001',1,1,1000 FROM DUAL UNION ALL
SELECT 'A001',1,2,3000 FROM DUAL
),
C(NO ,COUNT,SEQ,VENDOR,AMT)
AS
(
SELECT 'A001',1,1,'A1', 3000 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A2',1000 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A3',4000 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A4',3500 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A5',4200 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A6',4200 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A7',4200 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A8',4200 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A9',4200 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A10',4200 FROM DUAL UNION ALL
SELECT 'A001',1,1,'A11',4200 FROM DUAL UNION ALL
SELECT 'A001',1,2,'A1', 3201 FROM DUAL UNION ALL
SELECT 'A001',1,2,'A2',1200 FROM DUAL UNION ALL
SELECT 'A001',1,2,'A3',3400 FROM DUAL
)
SELECT
F.RN,F.NO,
MIN(DECODE(F.SEQ,1,F.SEQ))SEQ1,
MIN(DECODE(F.SEQ,1,F.RANK))RANK1,
MIN(DECODE(F.SEQ,1,F.VENDOR))VENDOR1,
MIN(DECODE(F.SEQ,1,F.AMT))AMT1,
MIN(DECODE(F.SEQ,2,F.SEQ))SEQ2,
MIN(DECODE(F.SEQ,2,F.RANK))RANK2,
MIN(DECODE(F.SEQ,2,F.VENDOR))VENDOR2,
MIN(DECODE(F.SEQ,2,F.AMT))AMT2,
MIN(DECODE(F.SEQ,3,F.SEQ))SEQ3,
MIN(DECODE(F.SEQ,3,F.RANK))RANK3,
MIN(DECODE(F.SEQ,3,F.VENDOR))VENDOR3,
MIN(DECODE(F.SEQ,3,F.AMT))AMT3,
MIN(DECODE(F.SEQ,4,F.SEQ))SEQ4,
MIN(DECODE(F.SEQ,4,F.RANK))RANK4,
MIN(DECODE(F.SEQ,4,F.VENDOR))VENDOR4,
MIN(DECODE(F.SEQ,4,F.AMT))AMT4,
MIN(DECODE(F.SEQ,5,F.SEQ))SEQ5,
MIN(DECODE(F.SEQ,5,F.RANK))RANK5,
MIN(DECODE(F.SEQ,5,F.VENDOR))VENDOR5,
MIN(DECODE(F.SEQ,5,F.AMT))AMT5,
MIN(DECODE(F.SEQ,6,F.SEQ))SEQ6,
MIN(DECODE(F.SEQ,6,F.RANK))RANK6,
MIN(DECODE(F.SEQ,6,F.VENDOR))VENDOR6,
MIN(DECODE(F.SEQ,6,F.AMT))AMT6,
MIN(DECODE(F.SEQ,7,F.SEQ))SEQ7,
MIN(DECODE(F.SEQ,7,F.RANK))RANK7,
MIN(DECODE(F.SEQ,7,F.VENDOR))VENDOR7,
MIN(DECODE(F.SEQ,7,F.AMT))AMT7,
MIN(DECODE(F.SEQ,8,F.SEQ))SEQ8,
MIN(DECODE(F.SEQ,8,F.RANK))RANK8,
MIN(DECODE(F.SEQ,8,F.VENDOR))VENDOR8,
MIN(DECODE(F.SEQ,8,F.AMT))AMT8,
MIN(DECODE(F.SEQ,9,F.SEQ))SEQ9,
MIN(DECODE(F.SEQ,9,F.RANK))RANK9,
MIN(DECODE(F.SEQ,9,F.VENDOR))VENDOR9,
MIN(DECODE(F.SEQ,9,F.AMT))AMT9,
MIN(DECODE(F.SEQ,10,F.SEQ))SEQ10,
MIN(DECODE(F.SEQ,10,F.RANK))RANK10,
MIN(DECODE(F.SEQ,10,F.VENDOR))VENDOR10,
MIN(DECODE(F.SEQ,10,F.AMT))AMT10
FROM
(
SELECT
C.NO,C.COUNT,C.SEQ,C.VENDOR,C.AMT,E.LOWER_BND,
CASE WHEN C.AMT <= E.LOWER_BND THEN RANK() OVER(PARTITION BY C.NO,C.COUNT,C.SEQ ORDER BY C.NO,C.COUNT,C.SEQ,C.AMT)||'' 
ELSE '탈락' END RANK,
ROW_NUMBER() OVER(PARTITION BY C.NO,C.COUNT,C.SEQ ORDER BY C.NO,C.COUNT,C.SEQ,C.AMT) RN
FROM
(
SELECT
D.NO,D.COUNT,(D.AMT*A.LOWER_BND*0.01) LOWER_BND
FROM (SELECT B.NO,B.COUNT,SUM(B.AMT) AMT FROM B GROUP BY B.NO,B.COUNT) D,A
WHERE D.NO=A.NO AND D.COUNT=A.COUNT
) E,C
WHERE 
E.NO=C.NO AND E.COUNT=C.COUNT
) F 
GROUP BY F.NO,F.RN ORDER BY F.NO,F.RN 
 
빈들의아빠(hyperrookie)님이 2015-10-03 14:34에 작성한 댓글입니다.
이 댓글은 2015-10-04 17:14에 마지막으로 수정되었습니다.

실력이 변변치 않다니요.

답변해주셔서 저는 너무 감사합니다.(--)(__)(--)

 

써니님이 2015-10-05 09:19에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40960오라클 10g for solaris(SPARC)을 윈2012 r2에 설치 가능한가요? [1]
궁금이
2015-10-07
8023
40959처리 결과에 대해서 여쭤봅니다..
이성호
2015-10-06
8122
40958where절에 in 조건에 case when 사용시 [5]
쿼리몰라요
2015-10-05
8851
40956기준율을 적용해서 업체별 순위를 표시하고 싶습니다. [2]
써니
2015-10-02
9309
40955shared라는건 어떤 기능의 옵션 인가요? [2]
whiteboy
2015-10-01
8421
40954새로이 덤프를 떠서 적용하려고 합니다. [1]
박현수
2015-10-01
7902
40953하나라도 포함되면 특정결과값으로 처리하기 [3]
초보
2015-09-30
8658
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.054초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다