쿼리질문드립니다. 0 2 1,667

by sql_master [SQL Query] [2010.02.17 16:14:59]


이상하게 안되네요.. 부탁드립니다.

WITH TEST AS (
SELECT '0' "D" ,'31' "CODE" FROM DUAL UNION ALL
SELECT '1' "D" ,'31' "CODE" FROM DUAL UNION ALL
SELECT '2' "D",'31' "CODE" FROM DUAL UNION ALL
SELECT '0' "D" ,'41' "CODE"FROM DUAL
)
이런 테이블이 있는데

D  CODE
0  31
1  31
2  31
0  41
1  41
2  41

이렇게 하고 싶습니다.
그래서 이렇게 했는데 WITH TEST AS (
SELECT '0' "D" ,'31' "CODE" FROM DUAL UNION ALL
SELECT '1' "D" ,'31' "CODE" FROM DUAL UNION ALL
SELECT '2' "D",'31' "CODE" FROM DUAL UNION ALL
SELECT '0' "D" ,'41' "CODE"FROM DUAL
)
SELECT TEMP.D, A.CODE
 FROM  TEST A
   ,(SELECT  LEVEL-1 "D"
  FROM DUAL
CONNECT BY LEVEL<=4
    ) TEMP
WHERE  A.D(+) = TEMP.D   
ORDER BY A.CODE, TEMP.D
  
자꾸 41이세 1,2 가 빠지고 3이 나오네요.. ㅠ.ㅠ원인을 알고싶습니다. 제가 잘못생각하는건지..

혹시 고수님께서 다른방법이있으시다면 부탁드립니다.

by 마농 [2010.02.17 17:30:57]
기준이 되는 것은 0,1,2 한 컬럼만 가지고 되는 것이 아니죠.
코드값 별로 0,1,2 가 있어야 하죠.
즉, 두개 컬럼으로 된 기준값 자료가 있어야 합니다.

WITH test AS
(
SELECT '0' d, '31' code FROM dual
UNION ALL SELECT '1', '31' FROM dual
UNION ALL SELECT '2', '31' FROM dual
UNION ALL SELECT '0', '41' FROM dual
)
, temp AS
(
SELECT code, d
FROM (SELECT DISTINCT code FROM test)
, (SELECT LEVEL - 1 d FROM dual CONNECT BY LEVEL <= 3)
)
SELECT b.d, b.code
FROM test a
, temp b
WHERE a.d(+) = b.d
AND a.code(+) = b.code
ORDER BY code, d
;

by sql_master [2010.02.17 17:50:42]
아.. 감사합니다... 마농님답변감사드립니다. 공부더 해야겠네요.. ㅠ.ㅠ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입