0

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

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

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

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

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

4

1 回答 1

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 与演示

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

获得此最终结果集后,您可以轻松地将其添加为标准 SSRS 表的数据集。

于 2013-09-09T18:19:52.880 回答