Проблема с порядком по FOR XML в T-sql (предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах)

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 ?)

Хотя в вашем запросе используется FOR XML (для обходного пути GROUP_CONCAT ), вы применяете порядок за пределами производной таблицы, использующей FOR XML , и, следовательно, ошибку.

Учитывая, что вы не включаете дату начала непосредственно в окончательный выбор (хотя вы составляете его как часть столбца STUFF ShowTime ), вы также не можете ORDER BY StartFilm в финальной группе GROUP BY , поскольку в противном случае столбец для включения в GROUP BY или в виде агрегированного столбца.

Что вы можете сделать, так это переместить ORDER BY в STUFF, а затем упорядочить по производному столбцу ShowTime (так как ваш запрос работает только в течение одного заданного дня, а StartFilmTime является первой частью столбца, состоящего из STUFFED ).

В то же время я бы СУЩЕСТВУЕТ повторение на производной таблице с помощью CTE:

 WITH cteFiltered AS (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' ) 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 cteFiltered b Where a.Hall = b.Hall and a.Title = b.Title order by b.StartFilm -- *** FOR XML PATH('')),1,1,'') As ShowTime from cteFiltered a group by a.Hall, a.Title order by ShowTime; -- *** Hour is first (assuming 24H format) and only one day 
  • Создание XML из таблицы SQL (уникальное форматирование XML)
  • Запрос XML SQL Server для получения значения атрибута и значения текста тега
  • Тип данных SqlServer Xml - как принудительно заполнять конечные элементы
  • Различные значения, возвращаемые SQL Server 2000 и SQL Server 2014 при возврате результатов, используя для явного выражения xml
  • ВЕРНУТЬСЯ В ЛЮБОВЬ С FOR XML, АВТО, ЭЛЕМЕНТЫ
  • Анализ XML в TSQL дает неверную ошибку столбца?
  • Где предложение при использовании XML в SQL
  • Изменение имени элемента XML в SQL Server
  • получить значение атрибута дочернего узла XML, где условие на родительском узле
  • Есть ли серебряная пуля для импорта XML-данных в SQL Server 2008 Express?
  • Тестирование для определенного значения узла в столбце XML, включая потенциально пустые узлы
  • Interesting Posts

    блокировка блокировки транзакций

    В SQL-сервере TOP возвращает неожиданные строки

    Совместим ли VB.Net DateTime с SQL DateTime?

    Выберите записи, где дата между текущей датой и текущей датой – 2

    Фильтрация по количеству строк первичного ключа

    Получение значения с автоматическим повышением столбца из таблицы, где несколько вставных / выбираемых в одной хранимой процедуре

    Пустое пространство в конце результатов запроса SQL Server

    Почему Microsoft не включала поддержку SQL Server в Silverlight?

    разделенные запятыми имена на основе идентификатора компании

    Создание уникального индекса, который технически не уникален

    Ведение журнала аудита для объектов, разделенных на несколько таблиц

    Как сопоставить часть объектной модели с столбцом XML в Entity Framework и SQL Server?

    Получение подмножества записей вместе с общим количеством записей

    Профилировщик SQL Server, показывающий ObjectType 20816 – PQ

    При создании новой базы данных в SQL Server 2008 некоторые таблицы создаются автоматически?

    Давайте будем гением компьютера.