我不确定如何提出我的问题,所以我会解释我正在尝试做什么:我正在使用Delphi XE构建一个应用程序,它应根据产品配方计算原材料的消耗量和订单。
我有5个表:订单,订单内容,产品,原材料和食谱。每个订单都由一些产品组成,每个产品都有自己的原料配方。
我已经使用Query1中的sql总结了所有订单中的所有产品。 这是Query1的命令:
select Products.Price,
OrdersContent.ID_Product, sum(OrdersContent.QNT) as QNT_Sum,
(Products.Price * sum(OrdersContent.QNT)) as Value
from Orders, OrdersContent, Products
where Orders.ID = OrdersContent.ID_Order
and Products.ID = OrdersContent.ID_Product
group by
OrdersContent.ID_Product, Products.Price
返回:
|Price | ID_Product | QNT_Sum | Value |
----------------------------------------
| 2 | 122521 | 150 | 300 |
| 10 | 366547 | 10 | 100 |
| xxx | xxxxxx | xxx | xxxxx|
这正是我想要的。
所以现在我想知道是否有办法用sql计算原材料消耗,因为我知道如何做到这一点的唯一方法是遍历整个Query1并计算每条记录的原材料消耗量(产品)单独,将其添加到新表中,然后总结结果,这非常耗时。
我很确定必须有一种更有效的方法来做到这一点,但不知道如何或在哪里搜索如何做到这一点。我不是要求代码,而是指向教程或示例的一些指针或链接。
我希望我足够清楚,如果没有,请提出更多信息。
答案 0 :(得分:0)
使用适当的连接将原材料和配方添加到FROM子句中。按原材料分组。从您的分组语句中删除id_product和价格。将select中的聚合更改为sum(products.price * orderscontent.qnt)。
我猜测食谱和原材料中的专栏名称,但这是一般的想法。
select Recipes.ID_RAW_MATERIALS,
sum(OrdersContent.QNT) as QNT_Sum,
sum(Products.Price * OrdersContent.QN)) as Value
from Orders, OrdersContent, Products, Recipes, RawMaterials
where Orders.ID = OrdersContent.ID_Order
and Products.ID = OrdersContent.ID_Product
and Recipes.ID_PRODUCT = Products.ID
AND Recipes.ID_RAW_MATERIAL = Rawmaterials.ID
group by Recipes.ID_RAW_MATERIALS