2017-04-22 21 views
0

選擇第一臺全值和一些值將多個表。我試圖從用戶表中獲取所有值並將他們在Loan表上收集的貸款總和,但每次運行查詢時都會收到錯誤消息。如何通過我已經與我的sql查詢問題的第二個表

這裏是SQL查詢

SELECT * FROM customer c 
    INNER JOIN(SELECT SUM(loan_amt) as lamt, disb_date, ac_no FROM loans GROUP BY ac_no) AS l ON c.cust_no=l.ac_no 

請,我究竟做錯了什麼?謝謝。

+0

的可能的複製[我如何加入的所有數據在1個山坳表2至表1,同時保持不匹配的數據表1中(http://stackoverflow.com/questions/25094865/how-do-i-join-所有數據在-1-COL-的-A-表2至表1,同時保管,非配套配件) – mrtig

回答

0

試試這個:

SELECT c.*,l.lamt FROM customer c INNER JOIN(SELECT SUM(loan_amt) as lamt, disb_date, ac_no FROM loans GROUP BY ac_no,disb_date) AS l ON c.cust_no=l.ac_no 
+0

@KristikaTalwar,我收到此錯誤:消息8120,級別16,狀態1,行1列 'loans.disb_date'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 –

+0

謝謝大家寶貴的時間。 –

+0

檢查我的編輯。無論是從選擇列表中刪除disb_date或條款@fagbemiayodele – kritikaTalwar

0

您在select比選擇更多的列都在group by。所以:

SELECT c.*, l.lamt 
FROM customer c LEFT JOIN 
    (SELECT SUM(loan_amt) as lamt, ac_no 
     FROM loans 
     GROUP BY ac_no 
    ) l 
    ON c.cust_no = l.ac_no; 

請注意,我也將連接更改爲LEFT JOIN。你的問題具體說明了「所有行」,這表明即使沒有貸款的行。

+0

謝謝。有效。 –

+0

當我想添加另一個像貸款表中的四行時,它會輸出錯誤。我會繼續將它們分組嗎? –

+0

@fagbemiayodele。 。 。你應該提出新的問題作爲一個*新問題。 –

0

我同意戈登·利諾夫。這是因爲您的group by不包含disb_date,即使它在子查詢的選擇部分。但是,您不希望將其添加到組中,因爲它可能不會產生正確的結果。

我猜你想要的disb_date因爲你想獲取貸款的特定月份。它是否正確?如果是的話,我會where子句添加到戈登的解決方案:

SELECT c.*, l.lamt 
FROM customer c LEFT JOIN 
    (SELECT SUM(loan_amt) as lamt, ac_no 
     FROM loans WHERE disb_date BETWEEN <insert date> AND <insert date> 
     GROUP BY ac_no 
    ) l 
    ON c.cust_no = l.ac_no; 

這將帶來哪些只收集您指定的每月貸款的總和。

相關問題