我有一个数据库已经发出了电子邮件。列是SendDate和MailFrom。每发一封电子邮件都是记录。
我想提出一份报告,显示在过去3个月中,有多少电子邮件是按月份和地址分类的:
From Adresss Nov 2015 Dec 2015 Jan 2016
clienta@mailer.com 36 28 14
clientb@mailer.com 13 6 8样本数据只需:
FromAdresss SendDate
clienta@mailer.com 25/11/15
clientb@mailer.com 20/12/15
clientb@mailer.com 21/11/15我尝试过各种分组和计数方法,但无法创建动态标题和它们下面的计数。
任何帮助都将不胜感激。
谢谢。
发布于 2016-02-09 08:55:07
SELECT FromAddress,
SUM( CASE WHEN MONTH(SendDate) = 11 AND YEAR(SendDate) = 2015 THEN 1 ELSE 0 END ) AS Nov2015,
SUM( CASE WHEN MONTH(SendDate) = 12 AND YEAR(SendDate) = 2015 THEN 1 ELSE 0 END ) AS Dec2015,
SUM( CASE WHEN MONTH(SendDate) = 1 AND YEAR(SendDate) = 2016 THEN 1 ELSE 0 END ) AS Jan2016
FROM tableName
GROUP BY FromAddress我在Server中使用了月份()和年份()函数从SendDate列中提取月份和年份。您可以使用在上述查询中使用的DBMS中提供的各个函数。
要使其动态,可以使用DATEDIFF()函数,如下所示
SELECT FromAddress,
SUM( CASE WHEN DATEDIFF(MONTH,SendDate,GETDATE()) = 3 THEN 1 ELSE 0 END ) ,
SUM( CASE WHEN DATEDIFF(MONTH,SendDate,GETDATE()) = 2 THEN 1 ELSE 0 END ) ,
SUM( CASE WHEN DATEDIFF(MONTH,SendDate,GETDATE()) = 1 THEN 1 ELSE 0 END )
FROM tableName
GROUP BY FromAddress发布于 2016-02-09 12:56:48
SELECT
COUNT(FromAddress) AS RecordCount,
DATEPART(MM, CONVERT(DATETIME, SUBSTRING(SendDate, 7, 2) + SUBSTRING(SendDate, 4, 2) + SUBSTRING(SendDate, 1, 2), 101)) AS 'MONTH',
DATEPART(YY, CONVERT(DATETIME, SUBSTRING(SendDate, 7, 2) + SUBSTRING(SendDate, 4, 2) + SUBSTRING(SendDate, 1, 2), 101)) AS 'YEAR'
FROM tableName
GROUP BY
DATEPART(MM, CONVERT(DATETIME, SUBSTRING(SendDate, 7, 2) + SUBSTRING(SendDate, 4, 2) + SUBSTRING(SendDate, 1, 2), 101)),
DATEPART(YY, CONVERT(DATETIME, SUBSTRING(SendDate, 7, 2) + SUBSTRING(SendDate, 4, 2) + SUBSTRING(SendDate, 1, 2), 101))如前所述,但由于您的日期不是标准SQL,所以您必须在它们周围做一些额外的工作。
https://stackoverflow.com/questions/35287311
复制相似问题