0
我正在查询表中上个月的付款总额和帐户报表。我用下面的查询要做到这一点总和值乘以记录数
SELECT DA.ID, DDO.CODE, COALESCE(SUM(FPP.AMOUNT_IN_DEFAULT_CURRENCY),0) AS PAYMENTS,SUM(FAT.AMOUNT_IN_DEFAULT_CURRENCY) as STATEMENTS
FROM DIM_ACCOUNT DA
JOIN DIM_DATA_OWNER DDO ON DA.DATA_OWNER_ID = DDO.ID
LEFT JOIN FACT_AS_TRANSACTION FAT ON DA.ID = FAT.ACCOUNT_ID
JOIN DIM_DATE DD ON FAT.VALUE_DATE_ID = DD.ID
LEFT JOIN FACT_PAY_PAYMENT FPP ON DA.ID = FPP.ORDERING_ACCOUNT_ID
JOIN DIM_PAY_PAYMENT_METHOD DPPM ON FPP.PAYMENT_METHOD_ID = DPPM.ID
WHERE DD.CAL_DATE >= TO_DATE('2015-09-19', 'YYYY-MM-DD')
AND FPP.CREATION_DATE >= TO_DATE('2015-09-19', 'YYYY-MM-DD')
AND DPPM.DIRECT_DEBIT_FLAG = 'N'
AND FAT.DEBIT_CREDIT_MARK = 'Debit'
GROUP BY DA.ID, DDO.CODE
HAVING SUM(FAT.AMOUNT_IN_DEFAULT_CURRENCY) != 0;
我装了3个金:用金额2500
付款B带量2500
付款下与量2000
支付制度
付款金额500
我希望总共需要7500.但是当我执行这个查询时,我得到了30000.这与7500 * 4(我的支付表中的4条记录)是一样的。我想我可能会加入错误的事情。问题是什么?
如果你真的想要LEFT JOIN的我除了常规的内部连接之外,将这些表的条件从WHERE子句移动到ON子句。 – jarlh
您有一个笛卡尔产品发生每个id /代码组合。解决此问题的最佳方法是在执行“连接”之前进行聚合。 –