我有一个复杂的问题需要用SQL查询来解决。我需要生成一个报告,该报告提供一个数值,表示用户在一年中的每个月执行的一系列操作。例如,如果User1在1月和7月执行了指定的操作,则查询需要在名为“1月”和“7月”的列中返回数字1,在表示其他月份的列中返回0。我从中提取数据的表只有一列包含采取特定操作的日期和时间(这是与此特定问题相关的唯一列)。我需要创建一个SQL查询,它将在一定时间内为每个用户返回此信息。 请帮忙,如果您需要更多信息,请告诉我,我会提供。 感谢
结果的结构应该是这样的: 用户Jan Feb ..... Dec UID 1 0 1
我需要为所选期间内出现的每个用户提供此功能。我的应用程序使用的是SQL Server 2005.
答案 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