【问题标题】:Crystal Reports/Sql Server displaying days of the month and hoursCrystal Reports/Sql Server 显示月份中的天数和小时数
【发布时间】:2011-05-07 02:07:13
【问题描述】:

我想将员工显示为行,将给定月份的天数显示为列。数据将是员工每天待命的时间。 目前我的 EmployeeTime 表包含一个开始日期/时间和一个结束日期/日期。样本数据为:

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 Server 完成这项工作或在 Crystal Reports 中使用某种交叉表。

非常感谢任何帮助

【问题讨论】:

    标签: sql-server crystal-reports


    【解决方案1】:

    您可以在 SQL 或 Crystal 中计算开始日期和结束日期之间的日期差 - 我建议使用 SQLServer 的 datediff 函数。

    如果您使用的是 SQLServer 2005 及更高版本,则可以使用 pivot 命令将数据集转换为包含日列和员工行 - 但有些月份的天数会比其他月份少,因此列数会比其他月份少。

    相反,我建议使用 Crystal 的交叉表功能:

    • 插入交叉表。
    • 将员工 ID 添加到行。
    • 将开始时间添加到列中,并设置列的组选项,以便打印列for each day
    • 将派生的持续时间字段添加到汇总字段 - 汇总操作应默认为 Sum of

    请注意,这种汇总待命时间的方法会将所有待命时间分配给员工轮班开始的那一天 - 例如,如果轮班从 2010 年 1 月 7 日 08:00 到 02/ 07/2010 01:00,这将显示为 2010 年 1 月 7 日的 5 小时,而不是 2010 年 1 月 7 日的 4 小时和 2010 年 2 月 7 日的 1 小时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      相关资源
      最近更新 更多