Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按来源和月份分组_Sql_Sql Server_Grouping - Fatal编程技术网

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中执行此操作。这里有各种各样的字符串格式选项,这就是您应该处理显示类型问题的地方。