조건 집합쿼리시 1 8 1,645

by 통합문서 [2016.01.07 11:01:48]


ID RESULTCD
100 F-실패
100 F-실패
200 S-성공
200 S-성공
300 S-성공
300 F-실패

 

위와 같은 데이터가 있다고 가정할때 ID별로 select시에 아래와 같이 구성하려 하는데 어떻게 해야될까요?

100 실패

200 성공

300 일부실패

 

by 아발란체 [2016.01.07 11:30:26]
WITH T AS (
  SELECT 100 id, 'F' AS res FROM DUAL
  UNION ALL SELECT 100,	'F' FROM DUAL
  UNION ALL SELECT 200,	'S' FROM DUAL
  UNION ALL SELECT 200,	'S' FROM DUAL
  UNION ALL SELECT 300,	'S' FROM DUAL
  UNION ALL SELECT 300,	'F' FROM DUAL
)
SELECT
  id,
  res,
  CASE
    WHEN INSTR(res, 'FS') > 0 OR INSTR(res, 'SF') > 0 THEN '일부실패' 
    WHEN INSTR(res, 'F') > 0 THEN '실패' 
    ELSE '성공'
    END
FROM (
  SELECT
    id,
    LISTAGG(res) WITHIN GROUP(ORDER BY id)  AS res
  FROM
    T
  GROUP BY
    id
)

 


by 아발란체 [2016.01.07 11:32:35]

음.. 예시 집합셋 데이타 내용을 바꾸셨네용.. 그래도 원리는 동일합니다.


by 통합문서 [2016.01.07 11:38:24]

아 LISTAGG라는 함수에 대해 알았네요. 답변감사드립니다^^


by 마농 [2016.01.07 11:35:47]
SELECT id
     , CASE WHEN MIN(res) = 'S' THEN '성공'
            WHEN MAX(res) = 'F' THEN '실패'
            ELSE '일부실패' END res
  FROM t
 GROUP BY id
 ORDER BY id
;

 


by 아발란체 [2016.01.07 11:41:19]

역시 마농님 킹왕짱.


by 통합문서 [2016.01.07 11:47:42]

아.. 결과값이 F, S니깐 ID별로 그룹바이하여 알파벳 순서를 이용하여 min, max로 나타내면 간단하군요! 답변 감사드립니다.(__)


by 대한민국만세 [2016.01.07 12:45:01]

대단하십니다..역시...


by 오라클초보 [2016.01.08 18:15:23]

짝짝짝!!!..절로 감탄이 나오네요..^^

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