쿼리 하나 질문 드리겠습니다. 0 4 1,037

by 탑개발자 [2013.08.28 12:28:04]


PRODUCT_KEY
GIST20130009
GIST20130010
GIST20130011
GIST20130012
GSAP20130014
GCBN20130017
GCBN20130018
GCBN20130019
GCOT20130015
GCOT20130016
GHOB20130023
GHOB20130024
GHOB20130025
GHOB20130026
GHOB20130024

위에 처럼 데이터 가 있습니다. 위에 서 PRODUCT_KEY 가  하나만 있으면 A 등급 이고 2개면 B 등급 3개 이상이면 C 등급입니다.

그리고 KEY 에서 두번째 부터 4번째 글짜기 장비 명이라서 GIST20130009 면 장비명이 IST 가 되는데 같으면 장비명입니다.

구하고 싶은거는 장비별에 따른 등급 갯수 입니다.

위에 데이터로만 보면

장비명 등급(A)  등급(B)  등급(C)
   IST   4   0     0
   SAP 1   0     0
   CBN     3   0     0
   COT     2   0 0
   HOB     3   1    0

이런 식에 데이터가 나왔으면 합니다.

어떻게 저렇게 결과를 뽑을지 알려주세요!!

by 용근님 [2013.08.28 13:07:54]

SELECT grp_key
, COUNT ( DECODE ( cnt, 1, 1 ) ) A등급
, COUNT ( DECODE ( cnt, 2, 1 ) ) B등급
, COUNT ( DECODE ( cnt, 3, 1 ) ) C등급
  FROM (
    SELECT SUBSTR ( product_key, 2, 3 ) grp_key
, PRODUCT_KEY
, COUNT (*)  cnt
  FROM t#
    GROUP BY SUBSTR ( product_key, 2, 3 )
   , PRODUCT_KEY
) GROUP BY grp_key

by 탑개발자 [2013.08.28 13:56:58]
답변 감사드립니다.

많은 도움이 되었습니다.

by 손님 [2013.08.28 14:17:17]

4개 이상이면 등급이 없나요??

by 아린 [2013.08.28 14:20:01]
SELECT SUBSTR(product_key, 2, 3) 장비
     , COUNT(CASE WHEN cnt = 1 THEN 1 END) 등급A
     , COUNT(CASE WHEN cnt = 2 THEN 1 END) 등급B
     , COUNT(CASE WHEN cnt > 2 THEN 1 END) 등급C
  FROM (SELECT product_key, COUNT(*) cnt
          FROM t
         GROUP BY product_key
        )  
 GROUP BY SUBSTR(product_key, 2, 3)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입