첨부된 그림과 같은 쿼리 결과가 있을때
아래와 같이 한개의 row로 결과를 받고 싶은데요.
컬럼명 : 1400 | 1415 | 1430
값 : 1 | 0 | 1
(0은 무시되고 1은 유지)
쿼리는 아래처럼 만듭니다.
SELECT CASE WHEN '1400' = d_time THEN 1 ELSE 0 END AS '1400', CASE WHEN '1415' = d_time THEN 1 ELSE 0 END AS '1415', CASE WHEN '1430' = d_time THEN 1 ELSE 0 END AS '1430' FROM T1 WHERE shop_seq = 7 AND yymmdd = '180616'
테이블 T1의 구조는 shop_seq | yymmdd | d_time 이며
7 | 180616 | 1400
7 | 180616 | 1415
7 | 180616 | 1430
7 | 180621 | 1700
7 | 180621 | 1830
10 | 180621 | 1530
...
식으로 들어갑니다.
어떻게 처리하면 좋을지 문의드립니다.
WITH T1 ( shop_seq , yymmdd , d_time ) AS ( SELECT 7 , '180616' , '1400' FROM DUAL UNION ALL --SELECT 7 , '180616' , '1415' FROM DUAL UNION ALL SELECT 7 , '180616' , '1430' FROM DUAL UNION ALL SELECT 7 , '180621' , '1700' FROM DUAL UNION ALL SELECT 7 , '180621' , '1830' FROM DUAL UNION ALL SELECT 10 , '180621' , '1530' FROM DUAL ) -- MAX 이용 SELECT MAX(CASE WHEN '1400' = d_time THEN 1 ELSE 0 END) AS "1400" , MAX(CASE WHEN '1415' = d_time THEN 1 ELSE 0 END) AS "1415" , MAX(CASE WHEN '1430' = d_time THEN 1 ELSE 0 END) AS "1430" FROM T1 WHERE shop_seq = 7 AND yymmdd = '180616' -- PIVOT 이용 SELECT * FROM ( SELECT T1.shop_seq , T1.yymmdd , T1.d_time FROM T1 WHERE shop_seq = 7 AND yymmdd = '180616' ) PIVOT ( MAX(1) FOR d_time IN (1400, 1415 , 1430))