ROW가 없는 케이스 처리 1 4 1,316

by 전문가되자 [SQL Query] [2017.06.01 18:49:40]


안녕하세요.

업무 중에 궁금한 점이 있어서 문의드립니다.

 

예를 들어 두개의 코드가 있습니다.

 

A라는 코드는 1,2,3,4

B라는 코드는 1,2 의 값을 가집니다.

 

A B C
1 1 10
1 2 15
2 1 21
3 2 12
4 1 13
4 2 15

 

위와 같은 데이터가 있을 때 아래와 같은 결과를 어떻게 쿼리를 작성해야 할지

잘 모르겠네요 ㅠㅠ

A B C
1 1 10
1 2 15
2 1 21
2 2 0
3 1 0
3 2 12
4 1 13
4 2 15
by 마농 [2017.06.01 19:01:36]
WITH code1 AS
(
SELECT 1 cd1 FROM dual
UNION ALL SELECT 2 FROM dual
UNION ALL SELECT 3 FROM dual
UNION ALL SELECT 4 FROM dual
)
, code2 AS
(
SELECT 1 cd2 FROM dual
UNION ALL SELECT 2 FROM dual
)
, data1 AS
(
SELECT 1 cd1, 1 cd2, 10 v FROM dual
UNION ALL SELECT 1, 2, 15 FROM dual
UNION ALL SELECT 2, 1, 21 FROM dual
UNION ALL SELECT 3, 2, 12 FROM dual
UNION ALL SELECT 4, 1, 13 FROM dual
UNION ALL SELECT 4, 2, 15 FROM dual
)
SELECT c1.cd1
     , c2.cd2
     , NVL(d1.v, 0) v
  FROM code1 c1
 CROSS JOIN code2 c2
  LEFT OUTER JOIN data1 d1
    ON c1.cd1 = d1.cd1
   AND c2.cd2 = d1.cd2
 ORDER BY cd1, cd2
;

 


by 전문가되자 [2017.06.01 19:30:11]

감사합니다. 위 쿼리 응용하여 잘 활용하였습니다.


by jkson [2017.06.01 19:11:22]

단순히 B코드만 누락되는 경우라면

WITH T AS
(
SELECT '1' A, '1' B, 10 C FROM DUAL UNION ALL
SELECT '1' A, '2' B, 15 C FROM DUAL UNION ALL
SELECT '2' A, '1' B, 21 C FROM DUAL UNION ALL
SELECT '3' A, '2' B, 12 C FROM DUAL UNION ALL
SELECT '4' A, '1' B, 13 C FROM DUAL UNION ALL
SELECT '4' A, '2' B, 15 C FROM DUAL
)
SELECT LST.A, CD.B, NVL(LST.C,0) C
FROM 
(
SELECT '1' B FROM DUAL UNION ALL
SELECT '2' B FROM DUAL
) CD --혹은 B코드 테이블
LEFT OUTER JOIN T LST
PARTITION BY (LST.A)
ON (CD.B = LST.B)

 


by 전문가되자 [2017.06.01 19:30:16]

감사합니다. 위 쿼리 응용하여 잘 활용하였습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입