У меня есть несколько таблиц, отчет по которым необходимо сделать одним sql запросом. На несколько разбить не получится, т.к. пишу для существующей системы и в функцию, генерирующую отчет, необходимо передать именно SQL запрос.
Т.е. есть список заказов (таблица 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 запросом. Приму любые подсказки, ссылки на похожие примеры и т.п. Заранее спасибо за помощь.
Здравствуйте, krandv, Вы писали:
K>Не могу придумать как это сделать одним SQL запросом. Приму любые подсказки, ссылки на похожие примеры и т.п. Заранее спасибо за помощь.
Если я правильно понял условие, то я бы посоветовал дважды применить операцию inner join. Гугль по этим словам выдаст Вам миллионы примеров.
Здравствуйте, 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
Нужные поля и математические операции напишите на свой вкус
Здравствуйте, 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))
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>