2013-09-09 4 views
0

Не вдаваясь в подробности, мне нужно создать отчет на основе процесса рабочего процесса. каждая работа имеет время начала, одно или несколько рабочих событий и время окончания. Сама работа хранится в одной таблице, а события (включая время начала, время окончания и любые другие события) сохраняются в другой таблице. В моих отчетах должна отображаться одна строка для каждого задания, которое должно отображаться при ее запуске, и при возникновении указанных событий. Пока нет проблем.Отчет о рабочих процессах SSRS

Однако возможно, что задание имеет более одного времени начала и окончания. Например, если началось задание, было обнаружено, что есть проблема с оборудованием, рабочий может вернуться, исправить проблему, а затем уйти снова. В этом случае для отчета потребуется отдельная строка для каждого периода начала/окончания. так, что-то вроде:

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

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

Не знаете, какой лучший подход был бы для этого.

+0

Можете ли вы указать конкретную структуру таблицы 'events'? –

+0

В принципе, это GUID (pk), идентификатор задания (fk), datetime и текст описания. – user1873604

ответ

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.

+0

Большое спасибо! Я думаю, что смогу сделать это, чтобы сделать то, что мне нужно! – user1873604