我sum()
在 PostgreSQL 中搜索了与 AGGREGATION 函数等效的函数,但没有找到。
我需要从另一个字段的数据中减去一个字段的数据。
代码如下:
'''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 中有 2 个模块,用于管理产品(销售、库存、采购等),当我批准采购订单时,我需要从Cantidad
另一个模块中调用的字段中减去采购的产品数量,所以,我知道如何在 OpenErp 中关联它们,问题是我不知道如何从中减去数量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
所以,我认为我需要一个更小更简单的函数来从我的领域中获得这种减法。在我的情况下,我不需要任何库存或拣货参数,只需从其中purchase_id
包含的产品中减去(通过像本例那样对它们进行分组)并使用另一个模块中的字段Cantidad
而不是product_qty
.
我希望我已经解释了自己。