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 40683 게시물 읽기
No. 40683
특정합계단위의 그룹 생성 도움이 필요합니다
작성자
박용대(pydd)
작성일
2015-01-20 09:21ⓒ
2015-01-20 09:22ⓜ
조회수
7,256

테이블 a에 가격 컬럼이 있는데 이 합계가 천만원이 넘을때마다 그룹1,2,3 으로 만들고싶은데 잘 안되네요.  도움 부탁드립니다

With tt as (

select 1 a, 100 b from dual

union all select 1 , 300 from dual

union all select  1,  500 from dual

union all select 1 , 200 from dual

 

 

union all select 1 , 300 from dual

union all select 1 , 600 from dual

union all select 1 , 150 from dual

)

이런데이타가 잇을때 1-4 행이 그룹1 , 5-7 이 그룹 2.  이런식으로 생성이 되어야합니다다닷

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

 핸드폰이라 스크롤이 안되네요 ㅠㅠ. 고수분들의 도움이 필요합니다. 도와주세요

박용대(pydd)님이 2015-01-20 09:24에 작성한 댓글입니다.

WITH tt AS
(
-- 정렬 기준이 반드시 필요한 문제입니다.
-- 정렬기준항목 seq 를 추가했습니다.
SELECT 1 id, 1 seq, 100 v FROM dual
UNION ALL SELECT 1, 2, 300 FROM dual
UNION ALL SELECT 1, 3, 500 FROM dual
UNION ALL SELECT 1, 4, 200 FROM dual
UNION ALL SELECT 1, 5, 300 FROM dual
UNION ALL SELECT 1, 6, 600 FROM dual
UNION ALL SELECT 1, 7, 150 FROM dual
)
, t1 AS
(
SELECT id, v
     , ROW_NUMBER() OVER(PARTITION BY id ORDER BY seq) rn
  FROM tt
)
, t2(id, rn, v, s, grp) AS
(
SELECT id, rn, v
     , v s
     , 1 grp
  FROM t1
 WHERE rn = 1
 UNION ALL
SELECT c.id, c.rn, c.v
     , CASE WHEN p.s >= 1000 THEN 0 ELSE p.s END + c.v s
     , CASE WHEN p.s >= 1000 THEN 1 ELSE 0 END + grp grp
  FROM t1 c
     , t2 p
 WHERE c.id = p.id
   AND c.rn = p.rn + 1
)
SELECT *
  FROM t2
;

마농(manon94)님이 2015-01-20 09:57에 작성한 댓글입니다.

 앗 마농님 감사합니다. 점심먹고 해볼께요

박용대(pydd)님이 2015-01-20 11:44에 작성한 댓글입니다.

 감사합니다 잘대네요. 모르던 with절  사용법을 배워가네요

박용대(pydd)님이 2015-01-20 16:56에 작성한 댓글입니다.

With t(a,b) as (
select 1, 100 from dual
union all select 1 , 300 from dual
union all select  1,  500 from dual
union all select 1 , 200 from dual
union all select 1 , 300 from dual
union all select 1 , 600 from dual
union all select 1 , 150 from dual
)select p.*, sum(b) over(partition by cgb order by rn) csum
from(select rn, a, b, cgb  from t
  model dimension by(row_number() over(order by rownum) rn)
    measures(a, b, 0 csum, 0 cgb)
    rules(csum[any] = case when csum[cv()-1]+b[cv()-1]>=1000 then 0 else nvl(csum[cv()-1] + b[cv()-1],0) end
          ,cgb[any] = case when csum[cv()-1]+b[cv()-1]>=1000 then cgb[cv()-1] + 1 else nvl(cgb[cv()-1],1) end)
) p
 

최성준(junkk)님이 2015-01-21 14:02에 작성한 댓글입니다.
이 댓글은 2015-01-21 14:38에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
40686날짜 범위 조인 문의드립니다. [2]
김태경
2015-01-22
6647
40685질문드립니다! 테이블에 not null 제약 조건 삽입 에러.. [1]
지유현
2015-01-20
7199
40684select view error (ora-00990) [1]
정용석
2015-01-20
7319
40683특정합계단위의 그룹 생성 도움이 필요합니다 [5]
박용대
2015-01-20
7256
40682쿼리 질문입니다..... [6]
류시형
2015-01-19
6548
40681데이터 반복 질문~!! [2]
천하제일
2015-01-19
6379
40679복구에러 [1]
대전시민
2015-01-16
6605
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다