从主表和子表中获取总和

时间:2015-04-07 20:01:47

标签: mysql sql

我希望我能够尽可能地解释这种情况:)

我们需要从MySQL表的主记录和子记录中获取总和。当前查询如下:

select  sum(
 abs(ifnull(dt.N_RETAIL_PRICE,0 ) * ifnull(dt.N_QTY_NO ,0) )
 + ifnull(st.shipping_total,0 ) + ifnull(st.TaxAmount,0 ) - abs(ifnull(st.discount ,0))
)  Total

FROM inv_store_transaction st

inner join inv_store_transaction_det dt

on st.OID = dt.INV_STORE_TRANSACTION

where st.INV_TRANSACTION_TYPE = 35
and st.INV_STORES = 1

我们怀疑的问题是,如果详细列有超过1行,则master的列将被多次求和。

例如,如果细节说3行,则其相关主数据的总和也将被取3次。

总而言之,我们需要总计所有属于特定条件的发票。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

此问题的解决方案是预先聚合详细数据:

select (sum(dt.amt) + sum((st.shipping_total) + sum(st.TaxAmount) - 
        sum(abs(st.discount))
       )  Total
FROM inv_store_transaction st inner join
     (select dt.INV_STORE_TRANSACTION,
             abs(coalesce(dt.N_RETAIL_PRICE, 0) * coalesce(dt.N_QTY_NO, 0)) as dtamt
      from inv_store_transaction_det dt
      group by dt.INV_STORE_TRANSACTION
     ) dt
     on st.OID = dt.INV_STORE_TRANSACTION
where st.INV_TRANSACTION_TYPE = 35 and st.INV_STORES = 1

您不需要为NULL进行测试,除非所有行的其中一列都有NULL值。