SELECT
[收費資料].[會員編號], [收費資料].[收費編號], SUM([收費明細].[收費金額])
FROM
[會員名冊]
LEFT JOIN [收費資料] ON [會員名冊].[會員編號] = [收費資料].[會員編號]
LEFT JOIN [收費明細] ON [收費資料].[收費編號] = [收費明細].[收費編號]
LEFT JOIN [發票資料] ON [收費明細].[收費編號] = [發票資料].[收費編號]
LEFT JOIN [發票明細] ON [發票資料].[發票號碼] = [發票明細].[發票號碼]
在我打完上面的 SQL 後,以下是我的推測:
如果 [收費資料] 是訂單,那 [收費明細] 就是訂單中的品項。
而 [發票資料] 是發票,那 [發票明細] 就是發票中的品項。
如果 [收費資料] 與 [發票資料] 是 1 對 1,那 [收費明細] 應該與 [發票明細] 是 1 對 1。
但你缺少了 [收費明細] 與 [發票明細] 的關聯,所以就產生笛卡兒乘積,出現重覆資料列的狀況。
補上關聯應該就好了
LEFT JOIN [發票明細] ON
[發票資料].[發票號碼] = [發票明細].[發票號碼]
AND [收費明細].[收費明細編號] = [發票明細].[收費明細編號]
"WHERE " & 條件排序
改為
"WHERE 1=1 " & GROUP BY 收費資料.會員編號 , 收費資料.收費編號 & 條件排序
試試
最後二個 LEFT JOIN 停止, 應該就好了 !
1.發票資料在 SELECT 的欄位中並沒有用到. 那就不用JOIN
2.主要問題: 收費明細的 JOIN 來源是 收費資料 , 發票資料的 JOIN 來源也是收費資料, 發票明細的JOIN 來源是票資料. 如果收費明細有3筆資料, 發票明細正常來說也是3筆資料.
收費資料 JOIN 收費明細 : 就會得到3筆資料.
收費資料 JOIN 發票資料 : 得到1筆資料
發票資料 JOIN 發票明細 : 又得3 筆資料.
因為資料在同一個 SELECT 中, 所以就會 3 X 3 = 9 筆資料.(金額就會是3倍)
停掉發票資料與發票明細 的 JOIN :就可以得到正確的金額.
若要用到發票明細中的資料,建議:
用收費明細與發票明細來做 JOIN (因為這二個TABLE 的資料應該要1對1)
join的用法並不太對。
依你目前的用法。等於是「會員」去對應「收費」
「收費」再去對應「明細」
然後後額外的去對應「發票」跟「發票明細」
這對sql來說,等於你的收費對應資料會有4筆重覆資料。
再全部統合到會員上。就會產生多倍的數值出現。
做工仔人!他有更明確的說明。我就不再詳細說明。
只能說,你目前的做法百分一千一定死。一定是要語法重新改掉
如需要有人幫你。還請提供對應的資料表欄位及名稱後。
再將想要的結果一起列出來。這樣才能幫你。