从Sequelize中的两个不同的join(includes)获取`Sum of

时间:2019-01-02 08:46:24

标签: mysql node.js database express sequelize.js

我想从sequilize的两个不同表中获取列的总和。

我想准确设置totalpaidrefundedrefundable字段,这些字段根据分组依据而不同,我无法解决。

//Some pre-desined variables
var totalPaidQueryStr = '(CASE WHEN (SUM(inv_payment_record_invoices.payment)) IS NULL THEN 0 ELSE (SUM(inv_payment_record_invoices.payment)) END)';
var totalPaidQuery = [Sequelize.literal(totalPaidQueryStr), 'totalpaid']; //Get the total paid amount till date;
var refundedQueryStr = '(CASE WHEN (SUM(inv_payment_record_refunds.amount)) IS NULL THEN 0 ELSE (SUM(inv_payment_record_refunds.amount)) END)';
var refundedQuery = [Sequelize.literal(refundedQueryStr), 'refunded']; //Get the total paid amount till date
var refundableQueryStr = `(inv_payment_records.amount - (${totalPaidQueryStr} + ${refundedQueryStr}))`;
var refundableQuery = [Sequelize.literal(refundableQueryStr), 'refundable']; //Get the total due amount

return InvPaymentRecords.findOne({
    attributes: [
        'customer_id',
        'amount',
        'company_currency_id',
        'exchange_rate',
        totalPaidQuery, //Want to accurate sum
        refundedQuery, //Want to accurate sum
        refundableQuery
    ],
    where: {
        'id': payment_record_id,
        'company_id': company_id
    },
    include: [
        {
            model: InvPaymentRecordInvoices,
            require: false,
            attributes: [],
        },
        {
            model: InvPaymentRecordRefund,
            require: false,
            attributes: [],
        }
    ],
    group: [
        //'inv_payment_records.id',
        //'inv_payment_record_invoices.id',
        //'inv_payment_record_refunds.id'
    ]
}).then(iprdata => {
    return sequelize.Promise.resolve(iprdata);
}).catch(error => {
    return sequelize.Promise.reject(error);
})

0 个答案:

没有答案