group by 질문입니다. (질문 잘못올려서 수정했습니다) 0 2 484

by 조용히 살고 싶다 [SQL Query] [2020.09.01 17:37:24]


제가 질문을 잘못 올려서 다시 수정했습니다.

A, B, C, D가 키인 테이블에서 E는 '상', '중', '하'라는 값을 가집니다. 

A, B, C로 group by 시 E의 값들 중 '상'만 있으면 정상, '상'이외 값이 있으면 비정상으로 표시하고 싶습니다. 

우선 데이터를 DECODE로 '상'은 0,  '중', '하'는 1로 변환한 후 A, B, C로 group by하고 E를 SUM해서 0보다 크면 비정상, 0이면 정상으로 표시하는 

방법으로 해야 할지 좋은 방법 있으면 알려주세요. 

 

by pajama [2020.09.01 17:59:38]

테스트 한 내용인데 원하시는 시나리오인지 모르겠군요.

with t as (
select 'a' a, 'b' b, 'z' c, '상' d from dual
union all
select 'a' , 'b' , 'c' , '중'  from dual
union all
select 'a' , 'b' , 'c' , '하'  from dual    
    )
select a,b,c, case when sum(d) > 0 then '비정상' else '정상' end st
from (select a, b, c, case when d = '상' then 0 else 1 end d from t)
group by a,b,c

 

   A B C ST
1 a b z 정상
2 a b c 비정상

by 마농 [2020.09.01 18:14:32]

a, b, c 가 키라면? 상,중,하를 동시에 여러개 가질 수 없죠.
a, b, c 가 키가 아니라. 키의 일부분 이겠네요.
 

SELECT a, b, c
     , DECODE(MAX(e), '상', '정상', '비정상') st
  FROM t
 GROUP BY a, b, c
;

 

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