计算SQL中某个月的出现次数

时间:2012-12-13 10:26:46

标签: sql

我有一个复杂的问题需要用SQL查询来解决。我需要生成一个报告,该报告提供一个数值,表示用户在一年中的每个月执行的一系列操作。例如,如果User1在1月和7月执行了指定的操作,则查询需要在名为“1月”和“7月”的列中返回数字1,在表示其他月份的列中返回0。我从中提取数据的表只有一列包含采取特定操作的日期和时间(这是与此特定问题相关的唯一列)。我需要创建一个SQL查询,它将在一定时间内为每个用户返回此信息。 请帮忙,如果您需要更多信息,请告诉我,我会提供。 感谢

结果的结构应该是这样的: 用户Jan Feb ..... Dec UID 1 0 1

我需要为所选期间内出现的每个用户提供此功能。我的应用程序使用的是SQL Server 2005.

3 个答案:

答案 0 :(得分:2)

select  datepart(month, dateColumn) as Month
,       count(*) as NumberOfActions
from    Actions
group by
        datepart(month, dateColumn)

答案 1 :(得分:0)

以上查询是正确的,虽然这只会返回月份的数字。

我会做以下事情。

SELECT  dateparth(month, dateColumn) as Month, count(*) as NumberOfActions
FROM Actions
GROUP BY Month

然后(如果使用php)考虑mktime()和date()函数。像这样:

/* The year doesn't matter. we are just trying to format this in to a date */
    $date = mktime(0, 0, 0, $row->Month, 1, 2012); 

/* This will display 'Jan, Feb, Mar ...' respectively */
    $dateText = date('M', $date); 

如果使用其他语言,那么只需谷歌替代品。这将是相同的原则..只是一种不同的语法。

希望这有帮助。

答案 2 :(得分:0)

这将返回行中的数据,但我认为OP实际上是在列中请求它。你需要一个PIVOT声明,就像这样...

...假设

Create Table TestPivot (UserName Varchar(10), DateColumn DateTime);

则...

Select *
  From (Select UserName, DateName(Month, DateColumn) As Month_Name, Count(*) As Month_Count
          From TestPivot
         Group By UserName, DateName(Month, DateColumn)) As SourcePart
  Pivot (Sum(Month_Count)
         For Month_Name In (January, February, March, April, May, June, 
                            July, August, September, October, November, December)) As PivotPart