2012-12-13 49 views
1

我有一個複雜的問題需要用SQL查詢來解決。我需要生成一個報告,其中給出的數值表示用戶在一年中每個月執行的一系列操作。例如,如果User1在1月和7月執行了指定的操作,則查詢需要返回名爲'1月'和'7月'的列中的數字1,並且代表其他月份的列中返回0。我從中提取數據的表格只有一列包含採取特定操作的日期和時間(這是與此特定問題相關的唯一列)。我需要做一個SQL查詢,它會在一定時間內爲每個用戶返回這些信息。 請幫忙,如果您需要更多信息,請告訴我,我會提供。 感謝計算SQL中某個月發生的次數

結果的結構應該是這樣的: 用戶一月二月.....月 UID 1 0 1

我需要這個出現在所選期間內每個用戶。我的應用程序正在使用SQL server 2005.

回答

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

看起來不錯,但你只需要組'Month'now .. not datepart(month,dateColumn) –

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); 

如果使用其他語言,那麼只是谷歌的替代品。這將是相同的原則..只是一個不同的語法。

希望這會有所幫助。

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 
+0

嗯,有沒有辦法做到這一點,而不創建一個新表,我使用我的客戶端數據庫,我沒有創建/刪除表的權限 – NDraskovic

+0

這只是爲了舉例,只有您需要修改腳本才能放置表格nd列名。如果你想爲你特定的現實世界的場景的具體代碼,那麼你將需要修改你的問題,並給我們這些信息。 –

+0

如果你能說出你正在使用的數據庫,那麼它也可能是有用的,例如, SQL Server,Oracle,MySQL等 –