使用MSSQL 2005。
我有一个计算统计数据的表 - 而且每天都会存储数据。
我想做的是 - 显示一个数据表 - 信息按月分组。
示例数据:
id | clickDate | clicksEmail
-------------------------------------
1 10/11/2013 2
2 09/11/2013 1
3 05/11/2013 4
4 30/10/2013 4
这就是我现在所拥有的:
SELECT datepart(m,clickDate), sum([clicksEmail]) TotalWeb
FROM tblCompanyClicks A WHERE companyID = 1129
GROUP BY datepart(m,clickDate)
ORDER BY datepart(m,clickDate) DESC
效果很好。只是我还想展示一年 - 而不仅仅是月份。 但是只要我将年份添加到SQL中,它就会破坏聚合函数。我尝试使用子选择,但这似乎也没有用。
这就是我想要展示的内容:
month & year | Summary
-------------------------------
Nov 2013 | 7
Oct 2013 | 4
协助表示赞赏!
谢谢!
答案 0 :(得分:1)
SELECT DATENAME(month,clickDate) + ' ' +
CONVERT(VARCHAR(4),DATEPART(year,clickDate)),
SUM([clicksEmail]) TotalWeb
FROM tblCompanyClicks A
WHERE companyID = 1129
GROUP BY DATENAME(month,clickDate) + ' ' +
CONVERT(VARCHAR(4),DATEPART(year,clickDate))
ORDER BY DATENAME(month,clickDate) + ' ' +
CONVERT(VARCHAR(4),DATEPART(year,clickDate)) DESC
答案 1 :(得分:1)
尝试分组:
SELECT CONVERT(VARCHAR(3), clickDate, 0) + ' ' + DATENAME(YEAR, clickDate),
sum([clicksEmail]) TotalWeb
FROM tblCompanyClicks A WHERE companyID = 1129
GROUP BY CONVERT(VARCHAR(3), clickDate, 0) + ' ' + DATENAME(YEAR, clickDate)
ORDER BY CONVERT(VARCHAR(3), clickDate, 0) + ' ' + DATENAME(YEAR, clickDate) DESC
另一种方式是:
SELECT SUBSTRING(CONVERT(VARCHAR(20), clickDate,106),3,20),
sum([clicksEmail]) TotalWeb
FROM tblCompanyClicks A WHERE companyID = 1129
GROUP BY SUBSTRING(CONVERT(VARCHAR(20), clickDate,106),3,20)
ORDER BY SUBSTRING(CONVERT(VARCHAR(20), clickDate,106),3,20) DESC
对于单独的月份和年份列,您可以使用DATEPART()函数,如下所示:
SELECT DATEPART(YEAR, clickDate) [Year],
DATEPART(MONTH, clickDate) [Month],
sum([clicksEmail]) TotalWeb
FROM tblCompanyClicks A WHERE companyID = 1129
GROUP BY DATEPART(YEAR, clickDate),
DATEPART(MONTH, clickDate)
ORDER BY DATEPART(YEAR, clickDate) DESC,
DATEPART(MONTH, clickDate) DESC