根据您的描述,您的数据如下所示:
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 表的数据集。