SQL - 根据配方计算材料消耗量

时间:2013-08-14 13:37:16

标签: sql delphi

我不确定如何提出我的问题,所以我会解释我正在尝试做什么:我正在使用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并计算每条记录的原材料消耗量(产品)单独,将其添加到新表中,然后总结结果,这非常耗时。

我很确定必须有一种更有效的方法来做到这一点,但不知道如何或在哪里搜索如何做到这一点。我不是要求代码,而是指向教程或示例的一些指针或链接。

我希望我足够清楚,如果没有,请提出更多信息。

1 个答案:

答案 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