合并SQL语句上的行

合并SQL语句上的行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有下面的SQL语句,返回2行预订天数 SELECT bd.ID, t.FirstName, t.Surname, CASE WHEN bd.BookingDuration = 3 AND CONVERT(time(0), bd.StartTime) < CONVERT(time(0), '12:00:00') AND bd.NoOfHOurs < 5.5 THEN bd.ID ELSE NULL END as 'TuesdayHourlyAM', CASE WHEN bd.Boo

我有下面的SQL语句,返回2行预订天数

SELECT bd.ID, t.FirstName, t.Surname, 
CASE WHEN bd.BookingDuration = 3 AND CONVERT(time(0), bd.StartTime) < CONVERT(time(0), '12:00:00') AND bd.NoOfHOurs < 5.5 THEN bd.ID ELSE NULL END as 'TuesdayHourlyAM',
CASE WHEN bd.BookingDuration = 3 AND CONVERT(time(0), bd.StartTime) < CONVERT(time(0), '12:00:00') AND bd.NoOfHOurs < 5.5 THEN bd.ID ELSE NULL END as 'TuesdayHourlyAM2'
from BookingDays bd join
(
    select ID, MIN(StartTime) as minx, MAX(StartTime) as maxx
    from BookingDays
    where BookingDate = CONVERT(date, '18/06/2013', 103) and BookingType = 0
    group by ID
) 
tmin
on bd.ID = tmin.ID and bd.StartTime = tmin.minx

inner join Teachers t on bd.TeacherID = t.ID
where t.Surname = 'cairns'
group by bd.ID, bd.StartTime, bd.DayText, t.Firstname, t.Surname, bd.BookingDate,       bd.BookingDuration, bd.NoOfHours, tmin.minx, tmin.maxx
本报告返回-

我要找的是一个格式类似的表格,但只有一行:

名字|姓氏|周二小时1 |周二小时1开始|周二小时1结束|周二小时2开始|周二小时2结束

星期二小时1:预订日期ID 周二小时2:预订日期ID 开始/结束:预订的开始和结束时间


如果AM1是最小的开始时间,AM2是最大的开始时间,则此条件的预订天数将不会超过2天。

尝试按teacherid而不是bookingid对子查询进行分组

SELECT t.FirstName, t.Surname, minx as TuesdayHourlyAM1, maxx as TuesdayHourlyAM2
from BookingDays bd join
(
    select TeacherID, MIN(StartTime) as minx, MAX(StartTime) as maxx
    from BookingDays
    where BookingDate = CONVERT(date, '18/06/2013', 103) and BookingType = 0
    group by TeacherID
) 
tmin
on bd.teacherID = tmin.ID and bd.StartTime = tmin.minx

inner join Teachers t on bd.TeacherID = t.ID
where t.Surname = 'cairns'

这在一定程度上是可行的。它删除第二行,但是AM和AM2值都是相同的BookingDayID。另外,我试图在2个CASE语句中显示BookingDayID,因此当我从groupby中删除ID时,我无法显示ID?Cheers我已经编辑了我的答案,以满足您指定的格式,即Firstname |姓氏| TuesdayHourlyAM1 | TuesdayHourlyAM2,bookingDayId应该无关紧要,除非您还希望在Selected中返回该字段谢谢。很抱歉,我已经编辑了我的问题,以使输出更清晰。好的,我添加了另一个答案以满足新的列输出,因为这是对原始答案的一个根本性更改。我可以看到您将如何处理此问题,它应该可以工作,但是返回0行。当我从两个联接中删除前1行时,我会得到2行数据,但第一行显示第一个预订两次,第二行显示第二个预订两次。谢谢
SELECT t.FirstName, t.Surname, tmin.id as TuesdayHourlyAM1, tmin.StartTime as TuesdayHourlyAM1Start, tmin.Endtime as  TuesdayHourlyAM1End ,
tmax.id as TuesdayHourlyAM2, tmax.StartTime as TuesdayHourlyAM2Start, tmax.Endtime as  TuesdayHourlyAM2End
Teachers t inner join 
from 
(
    select top 1 id, bd.teacherID MIN(StartTime) as StartTime, endtime as Endtime
    from BookingDays  bd inner join Teachers t on bd.TeacherID = t.ID
    where BookingDate = CONVERT(date, '18/06/2013', 103) and BookingType = 0  and t.Surname = 'cairns'
    group by id,endtime, bd.teacherID
        order by StartTime asc
) 
tmin 
on  t.id = tmin.teacherID
join
(
    select top 1 id, bd.teacherID, max(StartTime) as StartTime, endtime as Endtime
     from BookingDays  bd inner join Teachers t on bd.TeacherID = t.ID
    where BookingDate = CONVERT(date, '18/06/2013', 103) and BookingType = 0 and t.Surname = 'cairns'
    group by id,endtime, bd.teacherID
    order by StartTime desc

) 
tmax
 on  t.id = tmax.teacherID