在SQL中按月分组保留年份

时间:2013-11-11 07:52:20

标签: sql sql-server sql-server-2005

使用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

协助表示赞赏!

谢谢!

2 个答案:

答案 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