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 には、製品 (販売、在庫、購入など) を管理する 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
私は自分自身を説明したことを願っています。