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 35142 게시물 읽기
No. 35142
특정행 제외..
작성자
궁돌이
작성일
2009-01-21 16:29
조회수
3,752


아래와 같은 데이타에서,

==============================================

품명   구분 크기 일자      단가         금액

==============================================

063321 1   6  20080702 689000     626364

063321 1   6  20080702 1103000  -1002728

063321 1   6  20080702 1103000   1002728

063321 1   8  20090109 689000     626364

063321 1   8  20080522 992700     902455

063321 1   8  20080507 1103000   1002728       << 1

063321 1   8  20080522 1103000  -1002728       << 2

063321 1   8  20080626 1103000   1002728          3

063321 2  10  20090109 689000    -626364

063321 2  10  20080507 1103000   1002728

063321 2  12  20090109 689000    -626364

063321 2  12  20080507 1103000   1002728

==============================================


제가 구하고자 하는 쿼리는 위의 데이타중에서 특정행을 제외해서 조회를 하고 싶습니다..


그 제외될 특정행의 조건은 품명/구분/크기를 group 지어 그 "금액"필드의 합이 0이 되는 행들을 제외시키는 것입니다.


위에서는 '<<'를 보시면, 품명/구분/크기가 같고 금액의 합이 0 이므로 제외 되어야 합니다.

단, 제외 순서는 일자가 작은 순입니다...

즉, << 1 과 << 2번이 제외되어야지 2번과 3번의 조건이 제외될 조건과 같다고 2,3번이 제외되어서는 않됩니다...


어떤 방법이 있을까요??

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

어케 한번 테스트 해볼려해도 조건이 이상하네요..그람 2번째 3번째 행은 제외인가요?


합이 zero 제외가 아닌듯 합니다. 처음에는 그룹해서 zero 제외 그후 윗단에서 count(*) 가 1> 이상인놈에 한해 rownum 잡아서 맨마지막 남기고 삭제 이럴려 했는데...


암튼 조건이 정확히 뭔지 몰라 도와드리지 못하겠네요...application 단에서 해결 하시던지 아니면 프로시져로 하시면 좀더 명확하게 나올듯 합니다.

삽질중님이 2009-01-22 14:54에 작성한 댓글입니다. Edit
WITH t AS
(
SELECT '063321' cd, '1' gb, 6 sz, '20080702' dt, 1 no, 689000 cost, 626364 amt FROM dual
UNION ALL SELECT '063321', '1',  6, '20080702', 2, 1103000, -1002728 FROM dual
UNION ALL SELECT '063321', '1',  6, '20080702', 3, 1103000,  1002728 FROM dual
UNION ALL SELECT '063321', '1',  8, '20090109', 1,  689000,   626364 FROM dual
UNION ALL SELECT '063321', '1',  8, '20080522', 1,  992700,   902455 FROM dual
UNION ALL SELECT '063321', '1',  8, '20080507', 1, 1103000,  1002728 FROM dual
UNION ALL SELECT '063321', '1',  8, '20080522', 1, 1103000, -1002728 FROM dual
UNION ALL SELECT '063321', '1',  8, '20080626', 1, 1103000,  1002728 FROM dual
UNION ALL SELECT '063321', '2', 10, '20090109', 1,  689000,  -626364 FROM dual
UNION ALL SELECT '063321', '2', 10, '20080507', 1, 1103000,  1002728 FROM dual
UNION ALL SELECT '063321', '2', 12, '20090109', 1,  689000,  -626364 FROM dual
UNION ALL SELECT '063321', '2', 12, '20080507', 1, 1103000,  1002728 FROM dual
)
SELECT cd, gb, sz, dt, no, cost, amt
  FROM (SELECT cd, gb, sz, dt, no, cost, amt
             , SUM(amt) OVER(PARTITION BY cd, gb, sz, ABS(amt), rn) sum_amt
          FROM (SELECT cd, gb, sz, dt, no, cost, amt
                     , ROW_NUMBER() OVER(PARTITION BY cd, gb, sz, amt
                                             ORDER BY dt, no) rn
                  FROM t
                )
        )
 WHERE sum_amt != 0
 ORDER BY cd, gb, sz, dt, no
;
마농(manon94)님이 2009-01-22 15:12에 작성한 댓글입니다.

마농님 감사합니다!!!

이것땜에 한찬 고민했는데...ㅠㅠ

궁돌이님이 2009-01-23 09:00에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
35145날짜 구하기 [3]
손님
2009-01-23
3166
35144[질문] 오라클 rac 에서 process 수 개념 [1]
쭈니소리
2009-01-22
3120
35143두 필드의 범위에 해당하는 값을 쿼리하는 방법이 없을까요? [1]
김재근
2009-01-21
2722
35142특정행 제외.. [3]
궁돌이
2009-01-21
3752
35140VARCHAR2 DML 처리 관련 질문입니다.. [1]
항상궁금
2009-01-21
2298
35139DB 강제 세션 종료 관련 [1]
권혁원
2009-01-20
3214
35138급 질문 =초보자가 문의드려요~~~= [1]
김군
2009-01-20
2853
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다