合并SQL语句上的行
我有下面的SQL语句,返回2行预订天数合并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
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