SSRS工作流程报告

时间:2013-09-09 17:29:45

标签: sql-server reporting-services

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

但是,作业可能有多个开始和结束时间。例如,如果作业开始,则发现存在设备问题,工作人员可以返回,修复问题,然后再次离开。在这种情况下,报告对于每个开始/结束时段都需要单独的行。所以,比如:

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

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

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

1 个答案:

答案 0 :(得分: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'

您想要获得的是每个开始/结束组合一行。您可以通过选择开始行,然后加入Events表以获取后续结束行来执行此操作:

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表的数据集。