하나의 row 를 두개의 row 로 나눌수가 있는지 궁금합니다. 0 3 2,307

by bluebyte [2009.07.29 20:05:01]


예를 들어 3가지의 타입이 있습니다.

R type 은 ID,칼럼1,칼럼2에 값이 다 들어 있습니다.

C type 은 ID,칼럼1에만 값이 들어 있습니다.

D type 은 ID,칼럼 2에만  값이 들어 있습니다.

이런경우에 R type 를 ID,칼럼 1과 ID,칼럼2가 나누어진 row로 변경하고자 하고있습니다.

이런경우에 어떻게 처리를 하면 좋을지 궁금합니다.  감사합니다.

       ID      LINE      칼럼1     칼럼2      값           TYPE
15235434 1      835622   1835618 100         R
15235434 2                   0  1835618 100         D
15235434 3    1835623               0   100         C

 위의 내용을 아래와 같이 가져올수 있도록 하고 싶습니다.

       ID      LINE      칼럼1     칼럼2      값           TYPE
15235434 1      835622                 0 100         R
15235434 1                  0   1835618 100         R
15235434 2                   0  1835618 100         D
15235434 3    1835623               0   100         C

ID 별로 같은 내용들이 여러줄이 있습니다.

by 손님 [2009.07.29 20:46:20]
WITH t AS
(
SELECT '15235434' ID, 1 LINE, 835622 칼럼1, 1835618 칼럼2, 100 값, 'R' TYPE FROM dual
union all
SELECT '15235434' ID, 2 LINE, 0 칼럼1, 1835618 칼럼2, 100 값, 'D' TYPE FROM dual
union all
SELECT '15235434' ID, 3 LINE, 1835623 칼럼1, 0 칼럼2, 100 값, 'C' TYPE FROM dual
)
select distinct ID
, LINE
, decode(TYPE, 'R', decode(RN, 1, 0, 칼럼1), 칼럼1) 칼럼1
, decode(TYPE, 'R', decode(RN, 2, 0, 칼럼2), 칼럼2) 칼럼2
, TYPE
from
(select * from t) a,
(select rownum rn from dual
connect by rownum <= 2) b

by 마농 [2009.07.30 08:53:46]
WITH t AS
(
SELECT 15235434 id, 1 line, 835622 c1, 1835618 c2, 100 v, 'R' type FROM dual
UNION ALL SELECT 15235434, 2, 0, 1835618, 100, 'D' FROM dual
UNION ALL SELECT 15235434, 3,1835623, 0, 100, 'C' FROM dual
)
, c AS
(
SELECT DECODE(LEVEL,1,'C',2,'D','R') type
, DECODE(LEVEL,3,1,4,2,LEVEL) lv
FROM dual CONNECT BY LEVEL <= 4
)
SELECT t.id, t.line
, DECODE(c.lv,1,t.c1) c1
, DECODE(c.lv,2,t.c2) c2
, v
, t.type
FROM t, c
WHERE t.type = c.type
ORDER BY line, lv
;

by bluebyte [2009.07.30 10:35:09]
헛..손님님 마농님 감사합니다.
접속이 여의치 않는곳에 있어서 댓글이 늦었습니다.
갈길은 멀기만 하군요.ㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입