2013-12-12 63 views
2

我有下面顯示的表。SQL內部加入羣由

Table1 
Field1 Field2 
ID111 1,500 
ID112 100 
ID111 250 
ID114 50 
ID114 20 

Table2 
Field1 Field3 
ID111 Chris 
ID112 Mary 
ID114 John 

我想要的結果如下所示。

ID111 Chris 1,750 
ID112 Mary 100 
ID114 John 70 

我已經通過使用2個sql執行來實現此目的。感謝那些昨晚在這個網站上幫助過的人,我只用了一條sql語句就可以工作。但是,我無法將第一個表格鏈接到第二個表格以獲取更多信息。

通過使用

SELECT SUM(ctotal) AS TransactionTotal 
FROM table1 
GROUP BY field1 

我能夠

ID111 1,750 
ID112 100 
ID114 70 

我目前使用這個SQL語句來實現,它會彈出錯誤。

SELECT SUM(ctotal) AS TransactionTotal, 
     table2.field3 
FROM table1 
     INNER JOIN table2 
       ON table1.field1 = table2.field1 
GROUP BY table1.field1 

它說不能「試圖執行一個查詢,不包括指定表達式‘字段3’作爲集合功能的一部分。」

如果有人知道這個問題的解決方法,我會非常感激。

+0

包括Table2.Field3你'GROUP BY'條款 –

+0

在table2.Field3必須存在或者group by子句中或包含在和聚合函數等作爲SUM(),MAX(),MIN(),AVG(),... – Jade

回答

2

這應該suffice-

SELECT t1.firld1, t2.field3, 
     sum(t1.CTotal) as cTotal 
    FROM table1 t1 INNER JOIN table2 t2 
     ON t1.field1 = t2.field1 
GROUP BY t1.field1, t2.field3 

無論你列在你的SELECT聲明選擇是不是總˚F (即不使用COUNT,SUM或其他集合函數的列)也應在GROUP BY子句中提及。

這在MySQL中並沒有特別遵循(有時會產生不需要的結果),但它在Oracle中是強制性的。但是,當您使用上面的查詢時,大多數RDBMS將產生相似的結果。

+0

聖母聖母,正是我所尋找的解釋!好評!謝謝。 –

+0

你使用的是哪個數據庫?我可以給你相關的鏈接供你參考,如果我知道你在用什麼。 – Rachcha

+0

我'我現在通常只是在開發階段使用Access,但是在部署時,我總是使用MSSQL server 2005,2008或2012. :) –

0

你需要group by您在select包括列:

Select SUM(CTotal) as TransactionTotal, Table2.Field3 
from Table1 
INNER JOIN Table2 ON Table1.Field1=Table2.Field1 
GROUP BY Table1.Field3 
+0

嗨,感謝您的答覆,我試過你的解決方案,但現在它說「你試圖執行一個查詢,不包括指定的表達式'Field1'作爲聚合函數的一部分。「 :( –

0

添加字段3到GROUP BY子句這樣的:

Select SUM(CTotal) as TransactionTotal, Table2.Field3 from Table1 
INNER JOIN Table2 ON Table1.Field1=Table2.Field1 GROUP BY Table2.Field3 
1

由於Blorgbear和馬特·韋爾奇說,你需要包括不在組合中的聚合函數中的所有列。

原因是你試圖告訴它總結一個值,而不是要放在其他列中。

想想你在其他兩列中的數據,如何知道如何顯示100,250或Field2的任何其他值,如果你沒有指定一個動作如Min(拉最小值)

這裏是集合函數的列表: http://www.w3schools.com/sql/sql_functions.asp

0

試試這個

Select SUM(CTotal) as TransactionTotal, max(Table2.Field3) Field3 from Table1 
INNER JOIN Table2 ON Table1.Field1=Table2.Field1 GROUP BY Table1.Field1 

Select SUM(CTotal) as TransactionTotal, Table2.Field3 from Table1 
INNER JOIN Table2 ON Table1.Field1=Table2.Field1 GROUP BY Table1.Field1, Table2.Field3 
+0

table2.Field3必須存在於group by子句中,或者包含在和聚合中函數如SUM(),MAX(),MIN(),AVG(),... – Jade