помогите написать sql запрос
От: krandv Россия  
Дата: 17.02.14 19:43
Оценка:
У меня есть несколько таблиц, отчет по которым необходимо сделать одним sql запросом. На несколько разбить не получится, т.к. пишу для существующей системы и в функцию, генерирующую отчет, необходимо передать именно SQL запрос.

Таблицы:
orders(orderID)
ordered_carts(itemID, orderID, Quantity)
cart_items(itemID, productID)
products(productID, Price)


Т.е. есть список заказов (таблица orders), к каждому заказу через orderID привязан список продуктов (ordered_carts.itemID) и их количество в заказе (ordered_carts.Quantity). В заказе может быть несколько продуктов. ordered_carts.itemID не задает продукт напрямую, это порядковый номер покупки. Для связи с конкретным продуктом используется таблица cart_items, которая сопоставляет номер покупки (itemID) с ID продукта (productID). Для каждого продукта есть цена, заданная в таблице products. Все ID поля уникальны.

Отчет, т.е. SQL запрос, должен сформировать таблицу для заданного orderID. Например, если в заказе c orderID='order1' есть три позиции, то SQL запрос должен сформировать выборку их 3х строк:
order1, Price1*Quantity1
order1, Price2*Quantity2
order1, Price3*Quantity3

Не могу придумать как это сделать одним SQL запросом. Приму любые подсказки, ссылки на похожие примеры и т.п. Заранее спасибо за помощь.
Re: помогите написать sql запрос
От: Softwarer http://softwarer.ru
Дата: 17.02.14 19:47
Оценка:
Здравствуйте, krandv, Вы писали:

K>Не могу придумать как это сделать одним SQL запросом. Приму любые подсказки, ссылки на похожие примеры и т.п. Заранее спасибо за помощь.


Если я правильно понял условие, то я бы посоветовал дважды применить операцию inner join. Гугль по этим словам выдаст Вам миллионы примеров.
Re: помогите написать sql запрос
От: londinium Украина  
Дата: 17.02.14 20:23
Оценка:
Здравствуйте, krandv, Вы писали:

K>У меня есть несколько таблиц, отчет по которым необходимо сделать одним sql запросом. На несколько разбить не получится, т.к. пишу для существующей системы и в функцию, генерирующую отчет, необходимо передать именно SQL запрос.


K>Таблицы:

K>orders(orderID)
K>ordered_carts(itemID, orderID, Quantity)
K>cart_items(itemID, productID)
K>products(productID, Price)


K>Т.е. есть список заказов (таблица orders), к каждому заказу через orderID привязан список продуктов (ordered_carts.itemID) и их количество в заказе (ordered_carts.Quantity). В заказе может быть несколько продуктов. ordered_carts.itemID не задает продукт напрямую, это порядковый номер покупки. Для связи с конкретным продуктом используется таблица cart_items, которая сопоставляет номер покупки (itemID) с ID продукта (productID). Для каждого продукта есть цена, заданная в таблице products. Все ID поля уникальны.


K>Отчет, т.е. SQL запрос, должен сформировать таблицу для заданного orderID. Например, если в заказе c orderID='order1' есть три позиции, то SQL запрос должен сформировать выборку их 3х строк:

K>order1, Price1*Quantity1
K>order1, Price2*Quantity2
K>order1, Price3*Quantity3

K>Не могу придумать как это сделать одним SQL запросом. Приму любые подсказки, ссылки на похожие примеры и т.п. Заранее спасибо за помощь.


Если я правильно вкурил, то что-то вроде такого


SELECT ORD.OrderID,Cardd.ItemID,CARDD.Quantity,ITT.ProductID,
PRD.Price
FROM Orders AS ORD
JOIN Ordered_Carts AS CARDD ON ORD.OrderID=CARDD.OrerID
JOIN CART_ITEMS AS ITT ON CARDD.ItemID=ITT.ItemID
JOIN Products AS PRD on ITT.ProductID=PROD.ProductID
WHERE ORD.OrderID=@InOrderID

Нужные поля и математические операции напишите на свой вкус
Re: помогите написать sql запрос
От: smeeld  
Дата: 17.02.14 20:42
Оценка:
Здравствуйте, krandv, Вы писали:

K>У меня есть несколько таблиц, отчет по которым необходимо сделать одним sql запросом. На несколько разбить не получится, т.к. пишу для существующей системы и в функцию, генерирующую отчет, необходимо передать именно SQL запрос.


K>Таблицы:

K>orders(orderID)
K>ordered_carts(itemID, orderID, Quantity)
K>cart_items(itemID, productID)
K>products(productID, Price)


K>Т.е. есть список заказов (таблица orders), к каждому заказу через orderID привязан список продуктов (ordered_carts.itemID) и их количество в заказе (ordered_carts.Quantity). В заказе может быть несколько продуктов. ordered_carts.itemID не задает продукт напрямую, это порядковый номер покупки. Для связи с конкретным продуктом используется таблица cart_items, которая сопоставляет номер покупки (itemID) с ID продукта (productID). Для каждого продукта есть цена, заданная в таблице products. Все ID поля уникальны.


K>Отчет, т.е. SQL запрос, должен сформировать таблицу для заданного orderID. Например, если в заказе c orderID='order1' есть три позиции, то SQL запрос должен сформировать выборку их 3х строк:

K>order1, Price1*Quantity1
K>order1, Price2*Quantity2
K>order1, Price3*Quantity3

K>Не могу придумать как это сделать одним SQL запросом. Приму любые подсказки, ссылки на похожие примеры и т.п. Заранее спасибо за помощь.


SELECT orders.orderID, products.Price*ordered_casts.Quantity FROM orders LEFT JOIN ordered_carts ON ordered_carts.orderID=orders.orderID
LEFT JOIN products ON products.productID=(SELECT productID  FROM cart_items WHERE cart_items.itemID=(SELECT itemID FROM ordered_carts WHERE ordered_carts.orderID=orders.orderID))
Re[2]: помогите написать sql запрос
От: smeeld  
Дата: 17.02.14 20:59
Оценка:
Здравствуйте, smeeld, Вы писали:

Если только по продукту 'product1' то

S>

S>SELECT orders.orderID, products.Price*ordered_casts.Quantity FROM orders LEFT JOIN ordered_carts ON ordered_carts.orderID=orders.orderID
S>LEFT JOIN products ON products.productID=(SELECT productID  FROM cart_items WHERE cart_items.itemID=(SELECT itemID FROM ordered_carts WHERE ordered_carts.orderID=orders.orderID)) where orders.productID='product1';
S>
Re: помогите написать sql запрос
От: krandv Россия  
Дата: 17.02.14 21:28
Оценка:
Всем спасибо за ответы, допилил под свою базу и заработало!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.