Sql 按来源和月份分组
我试图创建一个查询,让我能够报告我们的客户是如何发现我们的(即通过谷歌、大喊、口碑等) 我有两张桌子:Sql 按来源和月份分组,sql,sql-server,grouping,Sql,Sql Server,Grouping,我试图创建一个查询,让我能够报告我们的客户是如何发现我们的(即通过谷歌、大喊、口碑等) 我有两张桌子: Customer name CreatedDate SourceID Sources SourceID SourceName 此查询: SELECT Customer.CreatedDate, Source.SourceName FROM Customer INNER JOIN Source ON Customer.SourceID = Source.SourceID
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
但我不确定如何创建此报告
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;
选择s.SourceName,c=COUNT(*)
来自dbo.Customer作为c
内部连接dbo.Source作为s
在c.SourceID=s.SourceID上
其中c.CreatedDate>='20130101'
和c.CreatedDate<'20130201'
按s.SourceName分组
按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;
选择s.SourceName,c=COUNT(*)
来自dbo.Customer作为c
内部连接dbo.Source作为s
在c.SourceID=s.SourceID上
其中c.CreatedDate>='20130101'
和c.CreatedDate<'20130201'
按s.SourceName分组
按s.SourceName排序;
你的答案正是我想做的(但完全错了!),我无法相信你能像你一样快速地输入答案——几乎是瞬间。我是一名.Net开发人员,但我的SQL不是很好(只是基础知识-足够应付,在你花3分钟的时间里花了整整两个小时!!)。我正在研究如何将月份(2013-03-01 00:00:00:000)替换为月份名称和年份。再次感谢。请在.NET中执行此操作。这里有各种各样的字符串格式选项,这就是你应该处理显示类型问题的地方。你的答案正是我想做的(但完全错了!),不能相信你能像你一样快速地键入它——几乎是瞬间。我是一名.Net开发人员,但我的SQL不是很好(只是基础知识-足够应付,在你花3分钟的时间里花了整整两个小时!!)。我正在研究如何将月份(2013-03-01 00:00:00:000)替换为月份名称和年份。再次感谢。请在.NET中执行此操作。这里有各种各样的字符串格式选项,这就是您应该处理显示类型问题的地方。