row를 머지하는 방법이 있을까요 0 2 769

by 아금다 [MySQL] row 로우 mysql 머지 [2018.06.15 18:39:20]


이미지 27.png (1,310Bytes)

첨부된 그림과 같은 쿼리 결과가 있을때

아래와 같이 한개의 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

...

식으로 들어갑니다.

어떻게 처리하면 좋을지 문의드립니다.

 

by 우리집아찌 [2018.06.15 19:58:15]
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))
 
 

 


by 아금다 [2018.06.15 21:35:29]

도움 감사드립니다!~

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