2014-02-15 3 views
0

Используйте подзапрос, возвращающий денежные значения всех ордеров со скидками - более 15%. Перечислите orderid и значение заказа этого последнего с наивысшим значением в верхней части.Помощь по запросам SQL-запросов

Я продолжаю получать сообщение об ошибке.

USE Northwind 
GO 

SELECT 
    SUM(od.orderid) As OrderID, 
    AS [Order Values] 
FROM 
    [Order Details] od 
WHERE 
    od.Discount = (SELECT od.Discount 
        FROM [Order Details] od 
        GROUP BY od.discount 
        HAVING od.discount >.15) 
GROUP BY 
    od.quantity, od.discount, od.UnitPrice 
ORDER BY 
    [Order Values] ASC; 

Ошибка:

Msg 156, Level 15, State 1, Line 2
Неправильный синтаксис около ключевого слова 'AS'.
Msg 156, Level 15, State 1, Line 9
Неправильный синтаксис рядом с ключевым словом 'GROUP'.

+2

какая ошибка вы получаете? – Randy

+0

Msg 156, Level 15, State 1, Line 2 Неверный синтаксис рядом с ключевым словом 'AS'. Msg 156, Level 15, State 1, Line 9 Неверный синтаксис рядом с ключевым словом «GROUP». – user3313555

+0

Можете ли вы предоставить образцы данных и желаемые результаты? –

ответ

0

линии имеют проблемы: ЗЕЬЕСТ SUM (od.orderid) Как OrderID, AS [Values ​​заказа]

Ничего не указано перед AS во 2-й строке. Либо вы пропустили имя столбца до того, как вам нужно удалить «AS OrderID», . Еще одна точка: измените оператор оператора WHERE на IN. Tis заключается в том, чтобы избежать ошибки, если ваш подзапрос возвращает несколько значений.

Ваш запрос будет выглядеть следующим образом: USE Northwind GO

ВЫБРАТЬ SUM (od.orderid) AS [значения Order] ОТ [Подробнее Заказать] од WHERE od.Discount IN (SELECT od.Discount FROM [Order Details] од GROUP BY od.discount HAVING od.discount> +0,15) GROUP BY od.quantity, od.discount, od.UnitPrice ORDER BY [Order Va lues] ASC;

+0

Пожалуйста, начните форматирование ваших сообщений. Кроме того, я настоятельно рекомендую ваши предложения, которые используют JOINs вместо INs. – ErikE

+0

Благодаря ответам я смог изменить пару вещей и заставить их работать по мере необходимости. Я приложил код ниже. ИСПОЛЬЗОВАНИЯ [Нортвинд] GO ВЫБОР od.OrderID, СУММА (od.orderid) AS [Значения заказа] FROM [Order Details] од ГДЕ od.Discount В (ВЫБРАТЬ od.Discount FROM [Order Details] ода GROUP BY od.discount HAVING od.discount> .15) GROUP BY od.orderID, od.quantity, od.discount, od.UnitPrice ORDER BY [Order Values] DESC GO Спасибо всем за то руководство и руководство. – user3313555

0

Вот ваш запрос:

SELECT SUM(od.orderid) As OrderID, 
AS [Order Values] 
FROM [Order Details] od 
WHERE od.Discount = (SELECT od.Discount 
        FROM [Order Details] od 
        GROUP BY od.discount 
        HAVING od.discount >.15 
        ) 
GROUP BY od.quantity, od.discount, od.UnitPrice 
ORDER BY [Order Values] ASC; 

Он имеет по крайней мере две синтаксические ошибки. AS [Order Values] просто задерживается там. Некорректно. Кроме того, у вас есть = для подзапроса, который, вероятно, вернет несколько строк. Даже после устранения этих проблем запрос не собирается делать то, что вы хотите, я не думаю.

EDIT:

запрос, который вы хотите, может быть:

SELECT od.orderid, sum(od.quantity * od.UnitPrice * (1 - od.discount)) as value 
FROM [Order Details] od 
GROUP BY od.orderid 
HAVING sum(case when od.discount > 0.15 then 1 else 0 end) > 0 
ORDER BY value desc; 
+0

«Наличие» внутри подвыборки на самом деле не требуется, поскольку агрегация не используется. –

+0

Он, по крайней мере, хочет получить сумму, возможно, из всех заказов, имеющих какие-либо позиции со скидкой. Подзапрос выбирает недисконтированные позиции в заказах, имеющих хотя бы один скидочный товар. – ErikE

+0

@ErikE. , ,Хорошая интерпретация. Я не понимал, насколько далеко от исходного запроса ('sum (orderid)'!?!). –

Смежные вопросы