2013-03-11 2 views
1

Google 고객이 Google에 대해 어떻게 알았는지 (Google, yell, 입소문 등을 통해)에 대해보고 할 수있는 쿼리를 작성하려고합니다.출처 별 및 월별 그룹화

나는 두 개의 테이블이 있습니다

Customer 
    name 
    CreatedDate 
    SourceID 

Sources 
    SourceID 
    SourceName 

이 쿼리 :

SELECT Customer.CreatedDate, Source.SourceName 
FROM Customer INNER JOIN 
Source ON Customer.SourceID = Source.SourceID 

나에게 기록 된 날짜를 기준으로 모든 소스의 목록을 제공합니다 : 내가 무엇

2011-05-05 00:00:00:000 Word Of Mouth 
2011-05-05 00:00:00:000 Word Of Mouth 
2011-05-05 00:00:00:000 Word Of Mouth 
2011-05-05 00:00:00:000 Walk In 
2011-05-05 00:00:00:000 Yell.com 
2011-05-05 00:00:00:000 Google Search 

얻으려고하면 원형 차트와 보고서로 가져올 수있는 목록이 있습니다 :

January 2013 
Word of Mouth: 15 
Walk In: 5 
Google Search: 6 
Yell.com 5 

February 2013 
Word of Mouth: 11 
Walk In: 0 
Google Search: 8 
Yell.com 3 

그러나이 보고서를 어떻게 만들 수 있는지 확실하지 않습니다.

답변

4
SELECT [Month] = DATEADD(MONTH, DATEDIFF(MONTH, 0, c.CreatedDate), 0), 
    s.SourceName, 
    c = COUNT(*) 
FROM dbo.Customer AS c 
INNER JOIN dbo.Source AS s 
ON c.SourceID = s.SourceID 
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, c.CreatedDate), 0), 
    s.SourceName 
ORDER BY [Month], s.SourceName; 

당신은 원하는 경우 특정 달 :

SELECT s.SourceName, c = COUNT(*) 
FROM dbo.Customer AS c 
INNER JOIN dbo.Source AS s 
ON c.SourceID = s.SourceID 
WHERE c.CreatedDate >= '20130101' 
AND c.CreatedDate < '20130201' 
GROUP BY s.SourceName 
ORDER BY s.SourceName; 
+0

당신의 대답은 정확히 내가 일을하려고 (하지만 완전히 틀린!)이었다 그리고 빨리로 당신이 그것을 입력 관리 믿지 수 없습니다 당신은 거의 즉시했습니다. 나는 .Net 개발자이지만 SQL은 그다지 훌륭하지 않다. (기본 지식 - 3 분을 소비했을 때 충분히 좋은 시간을 보냈고 !!). 월 (2013-03-01 00 : 00 : 00 : 000)을 월 이름과 연도로 대체하는 방법을 모색 중입니다. 다시 한번 감사드립니다. – Belliez

+0

.NET에서 그렇게하십시오. 여기에는 모든 종류의 문자열 형식 옵션이 있으며, 이것이 표시 유형 문제를 처리해야하는 곳입니다. –