从字段中减去数据 - PostgreSQL

时间:2013-06-02 18:31:13

标签: python postgresql openerp

我在PostgreSQL中搜索过等效的AGGREGATION函数sum(),但没找到。

我需要从另一个数据中减去一个字段的数据。

代码如下:

'''SELECT
            p.purchase_id,sum(m.Cantidad), m.state
        FROM
            stock_move m
        LEFT JOIN
            stock_picking p on (p.id=m.picking_id)
        WHERE
            p.purchase_id IN %s GROUP BY m.state, p.purchase_id'''

在这种情况下purchase_id总和到Cantidad它的数据,并存储在stock_picking但是我需要实际减去而不是求和,在PostgreSQL中没有减法函数,就我而言知道,我应该使用哪个功能来完成这项任务?

编辑:

我有两个模块,在OpenErp中,管理产品,(销售,库存,购买等),当我批准采购订单时,我需要从名为{{1的字段中减去购买的产品数量在另一个模块中,所以,我知道如何在OpenErp中关联它们,问题是我不知道如何从这个Cantidad中减去数量。

据我所知,将Cantidad收到的产品与purchase order中的product_qty相加的函数如下:

stock

所以,我认为我需要一个更小更简单的函数来从我的def desc_cert(self, cr, uid, ids, context=None): if not ids: return {} res = {} for id in ids: res[id] = [0.0,0.0] cr.execute('''SELECT p.purchase_id,sum(m.product_qty), m.state FROM stock_move m LEFT JOIN stock_picking p on (p.id=m.picking_id) WHERE p.purchase_id IN %s GROUP BY m.state, p.purchase_id''',(tuple(ids),)) for oid,nbr,state in cr.fetchall(): if state=='cancel': continue if state=='done': res[oid][0] += nbr or 0.0 res[oid][1] += nbr or 0.0 else: res[oid][1] += nbr or 0.0 for r in res: if not res[r][1]: res[r] = 0.0 else: res[r] = 100.0 * res[r][0] / res[r][1] return res 字段中减去这个。在我的情况下,我不需要任何库存或拣货参数,只需从Cantidad中减去其中包含的产品(通过将它们分组为此示例)并使用其他模块中的字段{{1而不是purchase_id

我希望我已经解释过了。

1 个答案:

答案 0 :(得分:3)

我想您可能没有意识到sum对表达式进行操作,而不仅仅是列引用:

SELECT sum(a - b) FROM the_table;

您还可以使用sum的输出进行进一步计算:

SELECT a - sum(b) FROM the_table;

基本代数转换表明b - a相当于(-a) + b

如果这不是你想要的,那么根据评论,我认为你可能需要改写你想要的东西,因为这是我唯一可以猜到的你可能遇到问题。