질문있습니다.. 쿼리 만드는 것,,(급함) 0 1 1,806

by 현재훈 [2009.06.20 17:41:09]


날짜                시간a                시간b

19990101      20                     NULL

19990101      30                      NULL

19990101       NULL               20

19990102         50               NULL

19990103       NULL                 30

19990103        NULL              30

19990104         51            NULL

19990104          51             NULL

19990104          NULL           51

19990104         NULL          50

위의  테이블을

날짜                시간a                시간b

19990101      20                     20

19990101      30                      NULL

19990102         50               NULL

19990103       NULL                30

19990103        NULL              30

19990104         51               51

19990104          51             NULL

19990104         NULL          50

이런식으로 바꾸고 싶습니다.

설명하자면, 날짜와 시간a와 시간b가 같으면 같은 로우에 위치시키는 것입니다.

날짜는 같고 시간a와 시간b가 다르다면 있는 그대로 나타냅니다.

이것을 쿼리문으로 알고 싶습니다. 3일동안 계속 생각했네요 ㅠ_ㅠ

 부탁드립니다.

by 마농 [2009.06.20 22:44:55]
WITH t AS
(
SELECT '19990101' dt, 20 tm_a, NULL tm_b FROM dual
UNION ALL SELECT '19990101', 30, NULL FROM dual
UNION ALL SELECT '19990101', NULL, 20 FROM dual
UNION ALL SELECT '19990102', 50, NULL FROM dual
UNION ALL SELECT '19990103', NULL, 30 FROM dual
UNION ALL SELECT '19990103', NULL, 30 FROM dual
UNION ALL SELECT '19990104', 51, NULL FROM dual
UNION ALL SELECT '19990104', 51, NULL FROM dual
UNION ALL SELECT '19990104', NULL, 51 FROM dual
UNION ALL SELECT '19990104', NULL, 50 FROM dual
)
SELECT dt
, MIN(tm_a) tm_a
, MIN(tm_b) tm_b
FROM
(
SELECT ROWNUM seq
, dt, tm_a, tm_b
, ROW_NUMBER() OVER(PARTITION BY dt, tm_a, tm_b ORDER BY ROWNUM) rn
FROM t
)
GROUP BY dt, NVL(tm_a, tm_b), rn
ORDER BY dt, MIN(seq)
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입