【问题标题】:SSRS workflow reportSSRS 工作流报告
【发布时间】:2013-09-09 17:29:45
【问题描述】:

无需过多介绍,我需要根据工作流程创建一个报告。每个工作都有一个开始时间、一个或多个工作事件和一个结束时间。作业本身存储在一个表中,事件(包括开始时间、结束时间和任何其他事件)存储在另一个表中。我的报告需要为每个作业显示一行,以显示它何时开始,以及何时发生指定事件。到目前为止没有问题。

但是,一个作业可能有多个开始和结束时间。例如,如果一个工作开始,然后发现存在设备问题,工人可以返回,解决问题,然后再次离开。在这种情况下,报告需要为每个开始/结束期间单独设置一行。所以,类似:

 Job# 2b    Job start 10am       work done      Job end 11am

 Job# 2b    Job start 1pm        work done      Job end 3pm     

不确定实现这一目标的最佳方法是什么。

【问题讨论】:

  • 能否给出events表的具体结构?
  • 基本上,它是一个 GUID(pk)、一个 Job ID (fk)、一个日期时间和一个描述文本。

标签: sql-server reporting-services


【解决方案1】:

根据您的描述,您的数据如下所示:

create table Jobs
(
  jobID int
  , jobName varchar(100)
)

create table Events
(
  jobID int
  , eventDate datetime
  , eventText varchar(100)
)

insert into Jobs select 1, 'Job1'
insert into Jobs select 2, 'Job2'

insert into Events select 1, '01-jan-2013 10:00', 'Start'
insert into Events select 1, '01-jan-2013 10:30', 'Work'
insert into Events select 1, '01-jan-2013 11:00', 'End'

insert into Events select 2, '01-jan-2013 10:00', 'Start'
insert into Events select 2, '01-jan-2013 10:10', 'Work'
insert into Events select 2, '01-jan-2013 10:20', 'End'
insert into Events select 2, '01-jan-2013 10:30', 'Start'
insert into Events select 2, '01-jan-2013 10:40', 'Work'
insert into Events select 2, '01-jan-2013 10:50', 'End'
insert into Events select 2, '01-jan-2013 11:00', 'Start'
insert into Events select 2, '01-jan-2013 11:10', 'Work'

您想要得到的是每个开始/结束组合一行。您可以通过选择 Start 行并连接回Events 表来获得后续的End 行:

select j.jobName, startDate = e.eventDate, endDate = endEvent.eventDate
from Jobs j
  inner join Events e on j.jobID = e.jobID
  outer apply
  (
    select top 1 ee.eventDate
    from Events ee
    where e.jobID = ee.jobID
      and e.eventDate < ee.eventDate
      and ee.eventText = 'End'
    order by ee.eventDate
  ) endEvent
where e.eventText = 'Start'

给出结果:

JOBNAME STARTDATE                         ENDDATE
Job1    January, 01 2013 10:00:00+0000    January, 01 2013 11:00:00+0000
Job2    January, 01 2013 10:00:00+0000    January, 01 2013 10:20:00+0000
Job2    January, 01 2013 10:30:00+0000    January, 01 2013 10:50:00+0000
Job2    January, 01 2013 11:00:00+0000    (null)

SQL Fiddle with demo.

您应该能够适应您的数据/表格。

一旦您有了这个最终结果集,您就可以轻松地将其添加为标准 SSRS 表的数据集。

【讨论】:

  • 非常感谢!我想我可以得到它来做我需要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2018-11-25
相关资源
最近更新 更多