Как я могу сделать несколько записей для печати в одну строку - PullRequest
0 голосов
/ 05 августа 2010

альтернативный текст http://img59.imageshack.us/img59/962/62737835.jpg

Эти три столбца взяты из 3 таблиц.Другими словами, эти записи извлекаются путем объединения трех таблиц.

Это в основном очень простой график, который отслеживает время начала смены, время обеда и т. Д.

Я хочу этичетыре записи для отображения в одной строке, например:

setDate --- ShiftStarted --- LunchStarted --- LunchEnded ---- ShiftEnded ----- TimeEntered

Примечание: отменить столбец TimeEntered.Я займусь этим позже, как только я знаю, как решить вышеуказанную проблему, мне будет легко справиться с остальными.

Как я могу это сделать?

Дополнительная информация - вот мой запрос:

SELECT TimeSheet.setDate, TimeSheetType.tsTypeTitle
FROM TimeSheet 
INNER JOIN TimeSheetDetail ON TimeSheet.timeSheetID = TimeSheetDetail.timeSheetID
INNER JOIN TimeSheetType ON TimeSheetType.timeSheetTypeID = TimeSheetDetail.timeSheetTypeID

Таблица расписания состоит из следующих столбцов:

timeSheetID
employeeID - FK
setDate

setDate представляет текущую дату.

Таблица TimeSheetTypeсостоит из следующих столбцов:

timeSheetTypeID
tsTypeTitle

tsTypeTitle представляет смены, например, начало смены, начало обеда, окончание смены и т. д.

Таблица TimeSheetDetail состоит из следующих столбцов:

timeSheetDetailID
timeSheetID - FK
timeSheetTypeID - FK
timeEntered
addedOn

timeEnetered представляет время, которое сотрудник установил вручную.AddedOn представляет системное время, время, когда была вставлена ​​запись.

Ответы [ 2 ]

2 голосов
/ 05 августа 2010

Я должен признать, что я не полностью прочитал все, но я думаю, что вы можете решить все остальное для себя. По сути, вы можете присоединиться к расписанию таблицы с самим собой.

Я сделал это ...

create table timesheet (timesheet number, setdate timestamp, timesheettype varchar2(200), timeentered timestamp);    
insert into timesheet values (1,to_date('2010-08-02','YYYY-MM-DD'),'Shift Started',current_timestamp);
insert into timesheet values (1,to_date('2010-08-02','YYYY-MM-DD'),'Lunch Started',current_timestamp);
insert into timesheet values (1,to_date('2010-08-02','YYYY-MM-DD'),'Lunch Ended',current_timestamp);
insert into timesheet values (1,to_date('2010-08-02','YYYY-MM-DD'),'Shift Ended',current_timestamp);
commit;

select * from timesheet t1  
left join  timesheet t2 on (t1.timesheet = t2.timesheet)
where t1.timesheettype = 'Shift Started'
  and t2.timesheettype = 'Lunch Started'

... и вылез это

TIMESHEET   SETDATE                     TIMESHEETTYPE   TIMEENTERED                 TIMESHEET_1 SETDATE_1                     TIMESHEETTYPE_1   TIMEENTERED_1
1           02.08.2010 00:00:00.000000  Shift Started   05.08.2010  12:35:56.264075 1             02.08.2010 00:00:00.000000    Lunch Started     05.08.2010 12:35:56.287357

Это был не SQL Server, но в принципе он должен работать и для вас.

Дайте мне знать, если у вас все еще есть вопрос

0 голосов
/ 05 августа 2010

Возможно, вы захотите проверить оператор PIVOT . В основном это позволяет вам использовать определенные значения строк для создания новых столбцов в наборе результатов.

Вам потребуется предоставить агрегатную функцию для объединения нескольких строк - например (при условии, что вы разбиваете данные по дням), вам нужно будет решить, как обращаться с несколькими событиями «начало смены» в тот же день Предполагая, что такие события никогда не происходят, вам все равно придется использовать агрегат. MAX () обычно является безопасным выбором в этих обстоятельствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...