2015-01-25 3 views
1

Заданный вопрос: 6. Напишите инструкцию SELECT, которая ответит на этот вопрос: Какова общая сумма заказанных товаров для каждого продукта? Возвращение этих столбцов: Имени продукта из таблицы Products The total amount для каждого product в OrderItems таблицыSQL Query MyGuitarShop База данных

(Hint: You can calculate the total amount by subtracting the discount amount from the item price and then multiplying it by the quantity)

Используйте оператор WITH ROLLUP включить строку, которая дает итог.

Это то, что у меня есть до сих пор. Я не ищу правильный ответ. Мне нужен совет, почему он не работает и что мне нужно делать. Благодаря!

SELECT p1.ProductName, 
     Sum(p1.ListPrice - (p1.ListPrice * p1.DiscountPercent) * Quantity) AS TotalAmount 
FROM Products AS p1 
     JOIN OrderItems AS oi 
     ON p1.ProductID = oi.ProductID 

Ошибка:

Column 'Products.ProductName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+0

На самом деле нет необходимости кричать. Благодаря! – abatishchev

ответ

1

Вы пропустили добавить group by с rollup

SELECT isnull(p1.ProductName,'Total') As ProductName, 
     Sum((p1.ListPrice - p1.DiscountPercent) * Quantity) AS TotalAmount 
FROM Products AS p1 
     JOIN OrderItems AS oi 
     ON p1.ProductID = oi.ProductID 
GROUP BY Rollup(ProductName) 

обновление: Я изменил формулу, чтобы найти totalmount = ((p1.ListPrice - p1.DiscountPercent) * Quantity) на основе объяснения в вопросе

+0

все суммарные суммы идут как отрицательные? –

+0

спасибо, кстати! –

+0

@ZackSpideyDavidson - похоже, что неправильная формула. Обновлено ответом на вопрос –

0

Это то, что я сделал:

SELECT ifnull(p.product_name,'Total') As ProductName, 
    Sum((p.list_price - p.discount_percent) * Quantity) AS TotalAmount 
FROM Products as p, order_items as oi 
where p.product_id = oi.product_id 
GROUP BY ProductName WITH ROLLUP 
Смежные вопросы