안녕하세요 ㅠ 쿼리 초보 질문드립니다 .ㅠㅠ
검색일 | KEYWORD | 검색량 |
2016-04-10 | 독일 | 6 |
2016-04-10 | 상해 | 6 |
2016-04-10 | 서안 | 10 |
2016-04-10 | 영국 | 6 |
2016-04-10 | 이탈리아 | 18 |
2016-04-10 | 중국 | 12 |
2016-04-10 | 청도 | 13 |
2016-04-10 | 캐나다 | 9 |
2016-04-10 | 호치민 | 3 |
2016-04-10 | 홍콩 | 32 |
2016-04-11 | 독일 | 11 |
2016-04-11 | 상해 | 13 |
2016-04-11 | 서안 | 14 |
2016-04-11 | 영국 | 11 |
2016-04-11 | 이탈리아 | 25 |
2016-04-11 | 중국 | 15 |
2016-04-11 | 청도 | 31 |
2016-04-11 | 캐나다 | 18 |
2016-04-11 | 호치민 | 13 |
이런식으로 조회된 테이블을 ▼
검색일 | 독일 | 상해 | 서안 | 이탈리아 |
2016-04-10 | 14 | 6 | 6 | 6 |
2016-04-10 | 11 | 6 | 6 | 6 |
2016-04-10 | 25 | 10 | 10 | 10 |
2016-04-10 | 15 | 6 | 6 | 6 |
2016-04-10 | 31 | 18 | 18 | 18 |
2016-04-10 | 18 | 12 | 12 | 12 |
2016-04-10 | 13 | 13 | 13 | 13 |
2016-04-10 | 49 | 9 | 9 | 9 |
2016-04-10 | 3 | 3 | 3 | 3 |
2016-04-10 | 32 | 32 | 32 | 32 |
2016-04-11 | 11 | 11 | 11 | 11 |
2016-04-11 | 13 | 13 | 13 | 13 |
2016-04-11 | 14 | 14 | 14 | 14 |
2016-04-11 | 11 | 11 | 11 | 11 |
2016-04-11 | 25 | 25 | 25 | 25 |
2016-04-11 | 15 | 15 | 15 | 15 |
이렇게 키워드를 컬럼으로 올리고 키워드별 검색량을 일자별로 SUM하고 싶습니다...
문제는, 저 KEYWORD가 기간에 따라 다른 키워드로 바뀌기 때문에 동적 쿼리를 써야할 것 같습니다...
일반 피봇은 이해하겠는데 동적쿼리는 ㅜㅜ 전혀 구문도 이해안가고 모르겠네요 ....
SELECT CONVERT(VARCHAR(10),NEW_DATE,126) AS 검색일, KEYWORD, COUNT(*) AS 검색량
FROM Log.dbo.KEYWORD_LOG
WHERE KEYWORD IN (SELECT TOP 10 KEYWORD FROM LIST2 ORDER BY 전주대비증감퍼센트 DESC )
AND NEW_DATE >= @COMPARE_START_DATE AND NEW_DATE < @END_DATE
GROUP BY CONVERT(VARCHAR(10),NEW_DATE,126), KEYWORD
ORDER BY 검색일
이건 제가 출력한 쿼리입니다....
감사합니다 ...
Comment 1
-
짱나부러
2016.04.28 16:09
create proc [dbo].[sp_test_test]@COMPARE_START_DATE date, @END_DATE dateasset nocount on;set transaction isolation level read uncommitted;declare @tSql nvarchar(max);declare @KEYWORD_LIST nvarchar(1000);;with keyword_log (new_date, keyword, val) as(select '2016-04-10', '독일', 5 union allselect '2016-04-10', '상해', 15 union allselect '2016-04-10', '서안', 3 union allselect '2016-04-10', '영국', 9 union allselect '2016-04-10', '독일', 1 union allselect '2016-04-10', '서안', 3 union allselect '2016-04-10', '영국', 2 union allselect '2016-04-11', '독일', 15 union allselect '2016-04-11', '상해', 115 union allselect '2016-04-11', '서안', 13 union allselect '2016-04-11', '영국', 19 union allselect '2016-04-11', '독일', 11 union allselect '2016-04-11', '서안', 13 union allselect '2016-04-11', '영국', 12)SELECT @KEYWORD_LIST = COALESCE( @KEYWORD_LIST + ',', '') + keywordFROM keyword_logWHERE NEW_DATE >= @COMPARE_START_DATE AND NEW_DATE < @END_DATEGROUP BY keyword;set @tSql = ';with keyword_log (new_date, keyword, val) as(select ''2016-04-10'', ''독일'', 5 union allselect ''2016-04-10'', ''상해'', 15 union allselect ''2016-04-10'', ''서안'', 3 union allselect ''2016-04-10'', ''영국'', 9 union allselect ''2016-04-10'', ''독일'', 1 union allselect ''2016-04-10'', ''서안'', 3 union allselect ''2016-04-10'', ''영국'', 2 union allselect ''2016-04-11'', ''독일'', 15 union allselect ''2016-04-11'', ''상해'', 115 union allselect ''2016-04-11'', ''서안'', 13 union allselect ''2016-04-11'', ''영국'', 19 union allselect ''2016-04-11'', ''독일'', 11 union allselect ''2016-04-11'', ''서안'', 13 union allselect ''2016-04-11'', ''영국'', 12)SELECT *FROM (SELECT CONVERT(VARCHAR(10),NEW_DATE,126) AS 검색일, KEYWORD, sum(val) AS 검색량FROM keyword_logWHERE NEW_DATE >= ''' + CONVERT(NVARCHAR(10),@COMPARE_START_DATE) + ''' AND NEW_DATE < ''' + CONVERT(NVARCHAR(10),@END_DATE) + '''GROUP BY CONVERT(VARCHAR(10),NEW_DATE,126), KEYWORD) as uppivot (SUM(검색량) FOR keyword in (' + @KEYWORD_LIST + ')) as pvtORDER BY 검색일';exec (@tsql);goexec [sp_test_test] '2016-04-10', '2016-04-12'우선 처음에 KEYWORD_LIST를 어플리케이션 단에서 만들어서 던지는걸 구상했는데 이래나 저래나 Definition Data가 없으면쿼리 한 번 더 해야될 것 같아서 현재 환경을 자세히 모르니;;;;;제거할거 제거하고 넣을거 넣고 해서 해보세욤....