Используя базу данных AdventureWorks2012, мне нужно изменить приведенный ниже запрос, чтобы выбрать первые 10% заказов с CustomerId больше 500 и упорядочить заказы по TotalDue в убывающей последовательности.
SELECT *
FROM Sales.SalesOrderHeader h
INNER JOIN Sales.SalesOrderDetail d
ON d.SalesOrderId = h.SalesOrderId
Вот две мои попытки решить проблему, но обе содержат ошибки:
Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'DESC'.
Msg 156, Level 15, State 1, Line 12
Incorrect syntax near the keyword 'FROM'.
Попытка 1
SELECT *
FROM SalesOrderHeader
WHERE SalesOrderID IN
(SELECT TOP 10 PERCENT SalesOrderID
FROM SalesOrderDetail
WHERE SalesOrderID > 500
ORDER BY TotalDue DESC);
Что я делаю неправильно? Спасибо.
ОБНОВЛЕНИЕ: я удалил запятую из раздела ORDER BY и смог выполнить запрос с моей первой попытки. Однако я получаю, казалось бы, бесконечную нагрузку «Успешное выполнение». Другими словами, я получаю более 3000 результатов и считаю, когда изменил запрос ниже:
SELECT *
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN
(SELECT TOP 10 PERCENT SalesOrderID
FROM Sales.SalesOrderDetail
WHERE CustomerID > 500
ORDER BY TotalDue DESC);
order by TotalDue DESC
. Думаю, это поможет вам ответить на ваш первый вопрос. - person Andrew   schedule 13.01.2014