group by 절 질문입니다. 0 3 1,544

by 쪼용 [Oracle 기초] [2012.02.22 19:59:46]



test table에 t1컬럼에 01~75까지 있습니다
여기에 구분자로 여기에 25마다 구분자로 1, 2, 3이 있는데 예를 들어
t1 t2 - column
01   1
.
.
.
25   1
26   2
.
.
.
50   2
51   3
.
.
.
75   3

이런식으로 값이 들어 있을때 10개의 컬럼이  1개의 로우를 생성 하며
t2의 구분자로 또 하나의 로우가 생성이 됩니다.
01   02   03 ............... 10
11   12   13 ............... 20
21   22   23 ... 25
26   27   28 ............... 35
.
.
.

이런 형식으로 짜여지게 되려면 그룹을 어떤 형식으로 주어야 하는지
일단 10개 컬럼을 1개의 로우로 하는 부분은 되었는데
select min(decode(substr(t1, 2, 1), '1) as c1, ....... min(decode(substr(t1, 2, 1), '0') as c10
  from
(
select row_number() over(partition by substr(t1, 2, 1) order by t1) as rn
   from test
)
group by rn

이런 형식으로 했는데 다른 방식이 있다면 조언 부탁드립니다.
by M [2012.02.22 20:21:17]
SELECT MAX(DECODE(MOD(RN,10),1,NUM)) NUM1,
MAX(DECODE(MOD(RN,10),2,NUM)) NUM2,
MAX(DECODE(MOD(RN,10),3,NUM)) NUM3,
MAX(DECODE(MOD(RN,10),4,NUM)) NUM4,
MAX(DECODE(MOD(RN,10),5,NUM)) NUM5,
MAX(DECODE(MOD(RN,10),6,NUM)) NUM6,
MAX(DECODE(MOD(RN,10),7,NUM)) NUM7,
MAX(DECODE(MOD(RN,10),8,NUM)) NUM8,
MAX(DECODE(MOD(RN,10),9,NUM)) NUM9,
MAX(DECODE(MOD(RN,10),0,NUM)) NUM10
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY GRP ORDER BY NUM) RN,
NUM,
GRP
FROM TEST
)
GROUP BY CEIL(RN/10),GRP
ORDER BY 1

by 쪼용 [2012.02.22 22:14:29]
M님 답변 정말 감사합니다! 큰 도움 받고 갑니다!

by 마농 [2012.02.23 09:08:56]
WITH test AS
(
SELECT LEVEL t1
FROM dual
CONNECT BY LEVEL <= 75
)
SELECT *
FROM
(
SELECT t1
, CEIL(t1 / 25) t2
, CEIL((MOD(t1 - 1, 25) + 1) / 10) t3
, MOD(MOD(t1 - 1, 25), 10) + 1 t4
FROM test
)
PIVOT (MIN(t1) FOR t4 IN (1,2,3,4,5,6,7,8,9,10))
ORDER BY t2, t3
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입