繁体   English   中英

如何将多条记录打印为单行

[英]How can I make multiple records to be printed as a single row

替代文字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表示员工手动设置的时间。 addOn表示系统时间,即插入记录的时间。

我必须承认,我还没有完全阅读所有内容,但我认为您可以自己解决其余的问题。 基本上,您可以将表时间表与其自身连接。

我做了这个...

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,但原则上它也应该为您工作。

让我知道您是否还有问题

您可能要签出PIVOT运算符。 它基本上允许您使用特定的行值在结果集中创建新的列。

您将必须提供用于合并多行的汇总函数-例如(假设您每天拆分数据),您必须决定如何在同一天处理多个“轮班开始”事件。 假设此类事件永远不会发生,您仍然必须使用汇总。 在这种情况下,MAX()通常是一个安全的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM