select a.Hall, a.Title,
STUFF((SELECT ', ' + '[' + CONVERT(varchar(2),DATEPART(Hour, b.StartFilm))
+ ':' + CONVERT(varchar(2),DATEPART(Minute, b.StartFilm))
+ ' ' + CONVERT(varchar(2),DATEPART(Hour, b.EndTime))
+ ':' + CONVERT(varchar(2),DATEPART(Minute, b.EndTime))
+ ']'
FROM (select c.Name as Hall, b.Title,
Convert(time,a.StartFilmTime) as StartFilm,
Convert(time,a.EndFilmTime) as EndTime
from FilmSchedule a
left join Film b on a.FilmId = b.Id
left join Room c on a.RoomId = c.Id
where a.ApproveStatus = 1 and a.Status = 1
and CONVERT(date, a.StartFilmTime) = '05-06-2015'
) b
Where a.Hall = b.Hall and a.Title = b.Title
FOR XML PATH('')),1,1,'') As ShowTime
from (select c.Name as Hall, b.Title,
Convert(time,a.StartFilmTime) as StartFilm,
Convert(time,a.EndFilmTime) as EndTime
from FilmSchedule a
left join Film b on a.FilmId = b.Id
left join Room c on a.RoomId = c.Id
where a.ApproveStatus = 1 and a.Status = 1
and CONVERT(date, a.StartFilmTime) = '05-06-2015'
Order by a.StartFilmTime
) a
group by a.Hall, a.Title
我收到错误:
ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP或FOR XML。
请帮忙! (我使用过FOR XML
?)
答案 0 :(得分:2)
虽然您的查询确实使用了FOR XML
(对于GROUP_CONCAT
workaround),但是您在使用FOR XML
的派生表外部应用订单,因此会出错。
鉴于您未在最终选择中直接包含开始日期(尽管您将其作为STUFF ShowTime
列的一部分进行撰写),但最终ORDER BY StartFilm
中也不能GROUP BY
1}}或者,因为该列需要包含在GROUP BY
中或作为聚合列。
你可以做的是将ORDER BY
移动到STUFF然后按派生列ShowTime
排序(因为你的查询只运行一天,而StartFilmTime是{的第一部分{1}}撰写专栏)。
同时,我会用CTE干掉派生表上的重复:
STUFFED