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 39484 게시물 읽기
No. 39484
쿼리 질문 ㅜ.ㅜ
작성자
작성일
2012-06-08 11:14
조회수
4,756

아...뭔가 될듯 될듯 하면서 안되서 질문드립니다..

이름 순번 그룹코드 가격
AA 1 0 100
AA 2 0 100
AA 3 0 100
AA 2 1 200
AA 1 2 110
AA 2 2 110
AA 1 3 150
AA 2 3 150
AA 3 3 150

위와같은 데이타가 있습니다.

헌데 그룹코드를 기준으로 1번 그룹코드의 경우 순번이 2번밖에 없습니다.

저럴때는 그룹코드 0번의 순번 1, 2의 값을 가져오고싶습니다.

2번 그룹코드의 경우도 3순번의 값이 없을시 그 이전그룹코드의 값이 있는 3순번의 값을 가져오고 싶은데

잘 안되네요..

원하는 데이타는 아래와 같습니다.

이름 순번 그룹코드 가격
AA 1 0 100
AA 2 0 100
AA 3 0 100
AA 1 1 100
AA 2 1 200
AA 3 1 100
AA 1 2 110
AA 2 2 110
AA 3 2 100
AA 1 3 150
AA 2 3 150
AA 3 3 150

노랗게 칠해진 부분이 신규로 채워지는 데이타의 값들이네 어찌해야할지 감이 안오네요

부탁드려용 ㅠ.ㅠ

 

 

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

WITH t AS
(
SELECT 'AA' nm, 1 seq, 0 grp, 100 amt FROM dual
UNION ALL SELECT 'AA', 2, 0, 100 FROM dual
UNION ALL SELECT 'AA', 3, 0, 100 FROM dual
UNION ALL SELECT 'AA', 2, 1, 200 FROM dual
UNION ALL SELECT 'AA', 1, 2, 110 FROM dual
UNION ALL SELECT 'AA', 2, 2, 110 FROM dual
UNION ALL SELECT 'AA', 1, 3, 150 FROM dual
UNION ALL SELECT 'AA', 2, 3, 150 FROM dual
UNION ALL SELECT 'AA', 3, 3, 150 FROM dual
)
SELECT b.nm
     , a.seq
     , b.grp
     , LAST_VALUE(b.amt IGNORE NULLS)
       OVER(PARTITION BY b.nm, a.seq ORDER BY b.grp) amt
  FROM (SELECT LEVEL seq FROM dual CONNECT BY LEVEL <= 3) a
  LEFT OUTER JOIN t b
  PARTITION BY (b.nm, b.grp)
  ON a.seq = b.seq
 ORDER BY nm, grp, seq
;

마농(manon94)님이 2012-06-08 13:26에 작성한 댓글입니다.

마농님 감사합니다~~^^

근데 한가지만 더 여쭤봐도 될까요?

이름에 대해서 저런 데이타들이 쭉있고

순번이 3으로 고정이 아니라 가변적입니다. 각 이름들에 대해서..

그리고 가져오는 값도 가격 하나뿐만 아니라 모든컬럼들에 대해서 가격처럼 값을 가져와야하는데

모든컬럼을 last _value 이 방법으로 하자니 좀 먹먹 하네요

혹 다른방법도 있을까요???

 

뽁님이 2012-06-08 14:34에 작성한 댓글입니다. Edit

WITH t AS
(
SELECT 'AA' nm, 1 seq, 0 grp, 100 amt, 1 cnt FROM dual
UNION ALL SELECT 'AA', 2, 0, 100, 2 FROM dual
UNION ALL SELECT 'AA', 3, 0, 100, 3 FROM dual
UNION ALL SELECT 'AA', 2, 1, 200, 4 FROM dual
UNION ALL SELECT 'AA', 1, 2, 110, 5 FROM dual
UNION ALL SELECT 'AA', 2, 2, 110, 6 FROM dual
UNION ALL SELECT 'AA', 1, 3, 150, 7 FROM dual
UNION ALL SELECT 'AA', 2, 3, 150, 8 FROM dual
UNION ALL SELECT 'AA', 3, 3, 150, 9 FROM dual
UNION ALL SELECT 'BB', 2, 0, 100, 8 FROM dual
UNION ALL SELECT 'BB', 3, 0, 100, 7 FROM dual
UNION ALL SELECT 'BB', 1, 1, 200, 6 FROM dual
UNION ALL SELECT 'BB', 4, 1, 110, 5 FROM dual
UNION ALL SELECT 'BB', 1, 2, 110, 4 FROM dual
UNION ALL SELECT 'BB', 2, 2, 150, 3 FROM dual
UNION ALL SELECT 'BB', 3, 2, 150, 2 FROM dual
UNION ALL SELECT 'BB', 4, 2, 150, 1 FROM dual
)
SELECT a.nm
     , a.seq
     , b.grp
     , LAST_VALUE(b.amt IGNORE NULLS)
       OVER(PARTITION BY a.nm, a.seq ORDER BY b.grp) amt
     , LAST_VALUE(b.cnt IGNORE NULLS)
       OVER(PARTITION BY a.nm, a.seq ORDER BY b.grp) cnt
  FROM (SELECT DISTINCT nm, seq FROM t) a
  LEFT OUTER JOIN t b
  PARTITION BY (b.grp)
    ON a.nm = b.nm
   AND a.seq = b.seq
 ORDER BY nm, grp, seq
;

마농(manon94)님이 2012-06-08 14:57에 작성한 댓글입니다.
이 댓글은 2012-06-08 15:26에 마지막으로 수정되었습니다.

마농님 감사합니다^^

데이타 새로 올려드릴려고 했는데 이미 답을 달아주셨네요~

정말 많은 도움되었습니다^^

수고하세요~~

뽁님이 2012-06-08 16:05에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39488다중행, 다중컬럼 서브쿼리를 where절 조건으로 주고 싶습니다. [2]
초초보
2012-06-11
8714
39486인덱스 효율에 대한 질문입니다.
마음자리
2012-06-10
4176
39485테이블스페이스과 데이터파일 이동....
백상옥
2012-06-08
3651
39484쿼리 질문 ㅜ.ㅜ [4]
2012-06-08
4756
39483SQL LOAD 실행문 질문
구름이
2012-06-08
3632
39482데이터가 많아지면, insert 속도가 느려진 경험하셨는지요?
김대훈
2012-06-05
4242
39480파티션 관련 질문 [1]
구름이
2012-06-04
3844
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다