이름 | 별명 | 데이터 | 데이터타입 |
---|---|---|---|
aa | bb | 123 | X |
aa | bb | 345 | Y |
현재는 gruop by 를 이름, 별명, 데이터 타입으로 묶어서 가져오고 있는데,
여기서 조건을 추가하여 이름, 별명 그룹핑한 후 데이터 타입 X 가 있을 경우엔 X의 데이터를 가져오고,
없으면 Y, Y도 없으면 Z 이런식으로 쿼리를 짜려고 합니다
select 이름, 별명, 데이터타입, max(데이터) as 데이터 from 테이블 A group by 이름, 별명, 데이터타입;
여기서 더 진도를 못나가겠네요.. 이런 저런 방법을 해봤는데 떠오르질 않아서 문의드립니다
감사합니다
SELECT 이름, 별명 , MIN(데이터타입) 데이터타입 , COALESCE( MAX(DECODE(데이터타입, 'X', 데이터)) , MAX(DECODE(데이터타입, 'Y', 데이터)) , MAX(DECODE(데이터타입, 'Z', 데이터)) ) AS 데이터 FROM 테이블 GROUP BY 이름, 별명 ; SELECT 이름, 별명 , MIN(데이터타입) 데이터타입 , MAX(데이터) KEEP(DENSE_RANK FIRST ORDER BY 데이터타입) 데이터 FROM 테이블 GROUP BY 이름, 별명 ; SELECT * FROM (SELECT 이름, 별명, 데이터타입, 데이터 , ROW_NUMBER() OVER(PARTITION BY 이름, 별명 ORDER BY 데이터타입, 데이터 DESC) rn FROM 테이블 ) WHERE rn = 1 ;