我有我的數據庫3個表: -SQL服務器的多個JOIN:避免重複值
客戶:
CId | CName | CLocation | CJoinDate
付款方式:
TxnId | TxStatus | TxComment | TxAmount | CId | TxDate
約會:
AppId | AppCode | CId | ADate | AComment
當我做了兩個表格的左連接那麼計算結果就會正確。但是當我嘗試與3個表連接時,計算結果是錯誤的。
的如: -
如果我嘗試此查詢然後計算總金額是正確的:
SELECT c.CName, sum(p.TxAmount)
FROM Customer c LEFT JOIN Payment p ON c.CId = p.CId
WHERE p.TxStatus = 1
GROUP BY c.CName;
在上面的查詢中,我只是將兩個表,給了我正確的結果。
現在,當我想在一張表中顯示所有的記錄,所以我不得不加入3個表格。 下面是我試一下查詢:
SELECT c.CName as Name, sum(p.TxAmount) as Payment, count(distinct a.ADate) as Total_Visit
FROM Customer c LEFT JOIN Payment p ON c.CId = p.CId LEFT JOIN Appointment a ON c.CId = a.CId
WHERE p.TxStatus = 1
GROUP BY c.CName;
上面的查詢給了我錯了付款金額爲每一個客戶。導致錯誤結果的原因是與每個客戶的付款表相比,約會表具有更多的行。因此,要顯示所有的約會條目,付款金額會得到重複計算錯誤。
如何解決上述情況與上述查詢。
韓國社交協會
編輯:其實那裏有2-3多個表,我有一個GROUP BY每月子句一起加入類同委任表格。
編輯1:修復它由多個CTE。感謝您寶貴的指點,這確實有幫助。
其實我有多個表加入。上述查詢只是一個大問題的小問題。所以我想知道如果我們能夠用JOIN來解決問題,我們可以做些什麼。 – Villie
好的,你也可以爲其他表使用子查詢。考慮使用子查詢和Pawel的CTE變體編寫查詢。那麼使用執行計劃成本最低的那個? –
我們是否可以使用帶有GROUP BY子句的CTE或子查詢,因爲我已經顯示給定年份的每個月的總數。 – Villie