我希望我能够尽可能地解释这种情况:)
我们需要从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次。
总而言之,我们需要总计所有属于特定条件的发票。
任何帮助表示感谢。
答案 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
值。