2010-08-05 19 views
0

alt text http://img59.imageshack.us/img59/962/62737835.jpg如何将多个记录打印为单行

这三列取自3个表格。换句话说,这些记录是 加入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 

的TimeSheet表包括以下栏:

timeSheetID 
employeeID - FK 
setDate 

的setDate表示今天的日期。

TimeSheetType表由以下各列的:

timeSheetTypeID 
tsTypeTitle 

tsTypeTitle表示移位例如移开始于,午餐开始于,在移位结束等

TimeSheetDetail表由以下各列的:

timeSheetDetailID 
timeSheetID - FK 
timeSheetTypeID - FK 
timeEntered 
addedOn 

timeEnetered表示雇员手动设置时间。 addedOn表示系统时间,即记录插入的时间。

+0

这四款游戏是否会是唯一的四款游戏?如果有多于/少于四个标题,你想要做什么? – 2010-08-05 09:07:52

+0

是的,只有4.但是,我已经解决了这个问题。不管怎么说,还是要谢谢你。 – user311509 2010-08-05 11:03:31

回答

2

我必须承认我没有完全阅读所有内容,但我认为你可以为自己制定其余的内容。基本上你可以加入表格时间表。

我这样做...

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

您可能要检查出PIVOT操作。它基本上允许您使用特定的行值在结果集中创建新列。

您必须提供合并多行的聚合函数 - 例如(假设您每天分割数据),您必须决定如何处理多个“移位启动”事件同一天。假设这些事件永远不会发生,您仍然必须使用聚合。在这些情况下,MAX()通常是安全的选择。