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 /代碼組合。解決此問題的最佳方法是在執行「連接」之前進行聚合。 –