我在PostgreSQL中搜索了一个等效的AGGREGATION函数sum()
,但是没有找到任何。从字段中减去数据 - PostgreSQL
我需要从另一个数据中减去一个字段的数据。
的代码去如下:
'''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里没有减功能远据我所知,我应该用哪个函数来完成这项任务?
编辑:
我有2个模块,在OpenERP的,其管理的产品,(销售,库存,采购等),当我批准采购订单,我需要减去,购买的产品数量从另一个模块中称为Cantidad
的字段,所以,我知道如何将它们与OpenErp相关联,问题是我不知道如何从这个Cantidad
减去数量。
据我所知,该款项,从purchase order
在stock
收到的product_qty
产品的功能如下:
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
)的字段。
我希望我已经解释了我自己。
当然有一个函数来减去值。请添加您的Postgres版本,并澄清您想要从中减去什么。 –
谢谢你,Postgres版本是9.2,我想从“Cantidad”中减去“purhase_id” – NeoVe
你在哪个RDBMS代码中给出了预期的输出?你能否提供关于模式的细节? – vyegorov