Мой запрос - получить верхний балл каждого игрока и Время, прошедшее для этого сеанса.SQL ORDER BY Подзапрос
В MySQL используется следующий запрос и работает
SELECT Playername as 'Player Name', HighScores.P1Score as 'Highest Score', TimeElapsed as 'Elapsed Time'
FROM
(gamerecord inner join playerprofile ON playerprofile.PID = gamerecord.PID),
(SELECT GID, PID, P1Score
FROM (SELECT GID, PID, P1Score
FROM gamerecord
ORDER BY 3 DESC) AS sortedtable
GROUP BY PID) AS HighScores
WHERE gamerecord.GID = Highscores.GID
Теперь при работе с MSSQL Server, выбрасывается следующее сообщение об ошибке.
Предложение ORDER BY
недействительна в представлениях, встроенных функциях, производных таблиц, подзапросов и общих табличных выражений, если оно не указано TOP
, OFFSET
или FOR XML
.
Самый внутренний запрос используется для сортировки результата перед операцией GROUP BY. Отмечается, что GROUP BY
занимает наибольшее значение и, таким образом, сортируя, я уверен, что верхнее значение является наивысшим показателем.
Как я могу сделать эту работу с MSSQL без этой ошибки?
В строке 7 вы не должны использовать 'ORDER BY 3 DESC'. Вместо '3' вы должны использовать допустимое имя столбца. ** EDIT: ** По-видимому, это допустимый синтаксис (даже я не вижу смысла в нем). Ошибка должна быть где-то в другом месте. –
В MySQL это недокументированное решение (если вы не подсчитаете раздел комментариев на соответствующей странице руководства). Не можете ли вы использовать документальное решение. – Strawberry
@ Майкл Вагнер 'ORDER BY 3 DESC' - это не то, что он ожидает, но это все еще действительный синтаксис. Вы можете просто заказать выражение, а не только имя столбца. Это не причина ошибки. –