Crystal Reports中的每日计划

时间:2012-01-28 19:40:59

标签: crystal-reports

我正在尝试在Crystal Reports中创建每日时间表,以显示诊所中医生的预约。从侧面开始,将是从上午7点到下午5点,以半小时为增量的一天中的小时。在顶部将是医生的名字。每列都会让医生的预约与时间排成一行。我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

您应该提供有关您的背景的更多信息;

解决方案

无论如何都要按照以下步骤操作:

  1. 编写一个返回医生姓名日期和时间约会
  2. 的查询
  3. 按感兴趣的日期过滤查询
  4. 创建cross-tab,将医生姓名放在列中,日期和时间排成行,在字段中预约
  5. 总结MAX上的约会(或MIN,其他摘要报告数字不是实际值)
  6. 编辑样式以省略行和列的总计(您不需要我想)
  7. 编辑日期和时间的格式(右键单击字段),仅显示小时(和分钟)
  8. 编辑日期和时间选项(在“十字标签专家”上)每分钟显示一行(默认“每天”只显示一行..)
  9. 享受您的举报
  10. 小心

    • 交叉表每行只允许预约
    • 如果来自查询的时间存在时间间隔,则交叉表中会有间隙(请查看16.00行);查询必须以报告空约会的方式编写。

    样本报告

    我创建了一份示例报告。

    enter image description here

    示例查询

    SELECT  'Doctor 1' as Doctor,  CAST('2012-02-01 07:00:00' AS DATETIME) as DateTime , 'mr. Red' as Appointment
    union
    SELECT 'Doctor 1' , CAST('2012-02-01 07:30:00' AS DATETIME)  , 'mr. Pink' 
    union
    SELECT 'Doctor 1' , CAST('2012-02-01 08:00:00' AS DATETIME)  , 'mr. White' 
    union
    SELECT 'Doctor 1' , CAST('2012-02-01 08:30:00' AS DATETIME)  , 'mr. Yellow' 
    union
    SELECT 'Doctor 1' , CAST('2012-02-01 09:00:00' AS DATETIME)  , 'mr. Green' 
    union
    SELECT 'Doctor 1' , CAST('2012-02-01 09:30:00' AS DATETIME)  , 'mr. Gray' 
    union
    SELECT 'Doctor 1' , CAST('2012-02-01 16:00:00' AS DATETIME)  , 'mr. Purple'
    union
    SELECT 'Doctor 2' , CAST('2012-02-01 07:30:00' AS DATETIME)  , 'mr. Red' 
    union
    SELECT 'Doctor 2' , CAST('2012-02-01 08:00:00' AS DATETIME)  , 'mr. Orange' 
    union
    SELECT 'Doctor 3' , CAST('2012-02-01 09:30:00' AS DATETIME)  , 'mr. Blue' 
    

答案 1 :(得分:0)

#Emanuele的建议有效,但有很多限制:在报告级别定义的固定时间表内只有一个半小时是可以管理的!

我的建议会更复杂一些:

  • 在数据库中添加一个“标准计划”表,其中包括#Emanuele提出的条目:从7h00到18h00半小时。
  • 管理“开放时间表”表,可以在白天的任何时间自由提供约会:完整时间,半小时,但也可以在标准时间表之前的任何特定时间。
  • 通过将“标准”和“打开”计划与UNION运算符
  • 合并来构建计划查询

使用此方法,可以生成包含

的报告
  • 标准/空计划作为默认报告
  • 在此时间表内进行的所有约会,即使他们不遵守30'步骤规则,也是如此。
  • 一位医生多次预约
  • 所有在约会之外完成的约会如果存在