Sql 如何将多个记录打印为一行

Sql 如何将多个记录打印为一行,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,这三列取自3个表。换句话说,这些记录是 通过连接3个表检索 它基本上是一个非常简单的时间表,记录轮班开始时间、午餐时间等 我希望这四条记录显示在一行中,例如: 设置日期---换班开始---午餐开始---午餐结束----换班结束-----输入时间 注意:丢弃输入的时间列。我稍后会处理这个问题,一旦我知道如何解决上述问题,我将很容易处理其余的问题 我怎么做 进一步信息-以下是我的查询: SELECT TimeSheet.setDate, TimeSheetType.tsTypeTitle FROM

这三列取自3个表。换句话说,这些记录是 通过连接3个表检索

它基本上是一个非常简单的时间表,记录轮班开始时间、午餐时间等

我希望这四条记录显示在一行中,例如:

设置日期---换班开始---午餐开始---午餐结束----换班结束-----输入时间

注意:丢弃输入的时间列。我稍后会处理这个问题,一旦我知道如何解决上述问题,我将很容易处理其余的问题

我怎么做


进一步信息-以下是我的查询:

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
timeSheetTypeID
tsTypeTitle
timeSheetDetailID
timeSheetID - FK
timeSheetTypeID - FK
timeEntered
addedOn
setDate表示今天的日期

时间表类型表由以下列组成:

timeSheetID
employeeID - FK
setDate
timeSheetTypeID
tsTypeTitle
timeSheetDetailID
timeSheetID - FK
timeSheetTypeID - FK
timeEntered
addedOn
tsTypeTitle表示班次,例如班次开始于、午餐开始于、班次结束于等

TimeSheetDetail表由以下列组成:

timeSheetID
employeeID - FK
setDate
timeSheetTypeID
tsTypeTitle
timeSheetDetailID
timeSheetID - FK
timeSheetTypeID - FK
timeEntered
addedOn
TimeEntered表示员工手动设置的时间。
addedOn表示系统时间,即插入记录的时间。

我必须承认我还没有完全阅读所有内容,但我想你可以自己计算出其余部分。基本上,您可以将表时间表本身连接起来

我做了这个

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,但原则上它也应该适用于您


如果您还有问题,请告诉我,您可能需要查看操作员。它基本上允许您使用特定的行值在结果集中创建新列


您必须提供一个聚合函数来组合多行—例如(假设您每天分割数据),您必须决定如何在同一天处理多个“shift Start”事件。假设此类事件从未发生,您仍然必须使用聚合。在这种情况下,MAX()通常是一个安全的选择。

这四个标题会是唯一出现的四个吗?如果标题多于/少于四个,您想做什么?是的,只有四个。然而,我已经解决了这个问题。无论如何,谢谢你。