SELECT시 값이 없을때에도 표시 할 수 있는 방법 질문입니다. 0 4 1,339

by 지침 [2017.01.06 11:27:45]


SELECT 
  type,
  count(idx) as cnt,
FROM trans
WHERE type IN('A','B','C','D')
GROUP BY type
			

type 값이  A C 만 있고  B D 가 없을떄

값은 

type | cnt 

A       20

C       14

이런식으로 나옵니다. 하지만 B D 는 표시하지가 않죠... 여기서 A B C D 값이 없을떄에도 모두 표시 하고싶습니다.. 

원하는 값은

type | cnt 

A       20

B        0

C       14

D        0

입니다. 혹시.. 좋은 방법이 있으면 알려주시면 감사하겠습니다. 

좋은 하루 되세요.

by 마농 [2017.01.06 11:46:15]
-- 우선 조회하고자 하는 타입 값들이 모두 저장되어 있는 코드 테이블이 필요합니다.
-- 해당 코드테이블을 이용해 아우터 조인 하시면 됩니다.
SELECT a.type
     , COUNT(b.idx) AS cnt
  FROM codes a
     , trans b
 WHERE a.type IN ('A','B','C','D')
   AND a.type = b.type(+)
 GROUP BY a.type
 ORDER BY a.type
;

 


by 지침 [2017.01.06 14:20:18]


답변감사합니다. 현재 테이블에서 따로 코드테이블을 둘수없는 상황이라...

sql만으로 출력할수있는 방법은 없을까요?


by 마농 [2017.01.06 14:21:18]

입력조건으로 UNION ALL 해서 코드집합을 만들어야 할 듯.


by 마농 [2017.01.06 16:18:02]
SELECT a.type
     , COUNT(b.idx) AS cnt
  FROM (SELECT REGEXP_SUBSTR(v, '[^,]+', 1, LEVEL) type
          FROM (SELECT 'A,B,C,D' v FROM dual)    -- Input List
         CONNECT BY LEVEL <= REGEXP_COUNT(v, '[^,]+')
        ) a
     , trans b
 WHERE a.type = b.type(+)
 GROUP BY a.type
 ORDER BY a.type
;

 

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