2010-11-09 60 views
1

我希望將僱員顯示爲行並將給定月份的天數顯示爲列。數據將是員工每天應召的數小時。 當前我的EmployeeTime表包含開始日期/時間和結束日期/日期。樣本數據是:Crystal Reports/Sql Server顯示月份和時間的幾天

EmployeeID StartTime EndTime 
1, 01/07/2010 08:00, 02/07/2010 01:00 
1, 04/07/2010 08:00, 06/07/2010 01:00 
2, 01/07/2010 23:00, 02/07/2010 10:00 

該報告將顯示爲:

如果
EmployeeID, 1, 2, 3, 4, 5, 6, 7..... 
1, 16, 1, 0, 16, 24, 1, 0 
2, 1, 10, 0, 0, 0, 0, 0 

不知道我應該有SQL服務器做的工作或使用某種在Crystal Reports交叉選項卡。

非常感謝所有幫助

回答

1

可以計算起始日期和結束日期之間的時間差在SQL或水晶 - 我建議使用的SQLServer的datediff功能。

如果您使用的是SQLServer 2005,則可以使用pivot命令將數據集轉換爲具有日期列和員工行 - 但有些月份的日期更少,因此列數少於其他列。

相反,我建議使用水晶的交叉功能:

  • 插入交叉表。
  • 將員工ID添加到行。
  • 將開始時間添加到列,並設置列的組選項,以便列將打印for each day
  • 將派生持續時間字段添加到彙總字段 - 彙總操作應該默認爲Sum of

請注意,這種總結待命時間的方法會將所有時間都分配給員工輪班開始的那一天 - 因此,例如,如果從01/07/2010 08:00開始輪班到2010年7月1日01:00,這將顯示爲2010年7月1日的5小時,而不是2010年7月1日的4小時和2010年7月2日的1小時。