안녕하세요 일별 월별 통계를 작성하려고 하다가 잘 안되서 문의드립니다.
날짜(string) , 타입(String)
20171011 , a
20171011 , b
20171011 , a
20171012 , a
20171012 , b
20171012 , a
20171111 , a
20171111 , b
20171111 , a
20171112 , a
20171112 , b
20171112 , c
위와 같은 식으로 날짜에 타입(String)값이 여러개씩 들어가있습니다.
출력하고자 하는 결과는
========일자별 ============
날짜 , 타입컬럼에 a 데이터를 가진 count , 타입컬럼에 b 데이터를 가진 count , 타입컬럼에 c 데이터를 가진 count
20171011 , 2 , 3 , 0
20171012 , 2, 1, 0
==========월별==========
201711 12 , 13 , 14
201712 12, 13 , 15
위와 같이 결과를 가지는 두개의 쿼리가 필요한데요
어떻게 작성하면 될지 알려주시면 감사하겠습니다.
Comment 2
-
자리비움
2017.10.13 16:33
WITH T1 AS(SELECT DT = '20171011' , VAL = 'a' UNION ALLSELECT '20171011' , 'b' UNION ALLSELECT '20171011' , 'a' UNION ALLSELECT '20171012' , 'a' UNION ALLSELECT '20171012' , 'b' UNION ALLSELECT '20171012' , 'a' UNION ALLSELECT '20171111' , 'a' UNION ALLSELECT '20171111' , 'b' UNION ALLSELECT '20171111' , 'a' UNION ALLSELECT '20171112' , 'a' UNION ALLSELECT '20171112' , 'b' UNION ALLSELECT '20171112' , 'c')SELECT DT, A_CNT = SUM((CASE WHEN VAL = 'a' THEN 1 ELSE 0 END)), B_CNT = SUM((CASE WHEN VAL = 'b' THEN 1 ELSE 0 END)), C_CNT = SUM((CASE WHEN VAL = 'c' THEN 1 ELSE 0 END))FROM T1GROUP BY DTUNION ALLSELECT DT = CONVERT(VARCHAR(6),DT,121), A_CNT = SUM((CASE WHEN VAL = 'a' THEN 1 ELSE 0 END)), B_CNT = SUM((CASE WHEN VAL = 'b' THEN 1 ELSE 0 END)), C_CNT = SUM((CASE WHEN VAL = 'c' THEN 1 ELSE 0 END))FROM T1GROUP BY CONVERT(VARCHAR(6),DT,121) -
강종원
2017.10.13 17:08
답변감사합니다. 많은도움 되었습니다.