2014-11-04 108 views
0

林只是試圖做一個Count(每個客戶端汽車)SQL伯爵加入

所以我嘗試這樣的:

SELECT tbl_Clients.FirstName, tbl_Clients.LastName, tbl_Clients.Phone, 
COUNT(*) AS VehiculeTotal 
FROM tbl_Contrat 
INNER JOIN tbl_Clients ON tbl_Contrat.Client = tbl_Clients.ID 
GROUP BY tbl_Contrat.Client 

和簡單的方法:

SELECT FirstName, LastName, Phone, COUNT(*) AS VehiculeTotal 
FROM tbl_Clients, tbl_Contrat GROUP BY Client 

但它看起來像我有同樣的問題:

Column 'tbl_Clients.FirstName'(LastName and phone too) is invalid in the 
select list because it is not contained in 
either an aggregate function or the GROUP BY clause. 

但不想分組他們

我需要顯示名字,姓氏和電話!

幫助,請

+1

你可以將它們包含在GROUP BY中。如果您已經按照(可能是唯一的)客戶端ID進行分組,那麼包含不太唯一的FirstName,LastName和Phone也是無害的。試試看,你會看到。 – 2014-11-04 22:39:57

+0

此外,由於您收到了一條需要「GROUP BY」的消息,因此我假設您使用的是SQL Server,而不使用MySQL。如果是這樣,請從您的問題中刪除MySQL標籤。 – 2014-11-04 22:42:15

回答

0

當您使用的結果分組得到劃分爲基礎列你GROUP BY的獨特羣體。在你的情況下,tbl_client.id應該是唯一的,所以如果組中使用的任何其他列不是唯一的,則無關緊要。假設您有兩個名爲John Doe的客戶端,客戶端ID爲1和2,分組仍然會根據ID將它們分開,並且不會發生進一步的分組。

這個查詢應該做你想要的。我冒昧地爲表名使用別名,以使其更短,更易讀。

SELECT cli.FirstName, cli.LastName, cli.Phone, COUNT(*) AS VehiculeTotal 
FROM tbl_Contrat con 
INNER JOIN tbl_Clients cli ON con.Client = cli.ID 
GROUP BY cli.id, cli.FirstName, cli.LastName 

注意,通過使用內部連接你消除了可能沒有任何汽車由於某種原因的任何客戶端,當然這可能是好的,但如果你想回到沒有客戶端任何汽車,你應該使用左加入,而不是像這樣:

SELECT id, firstname, lastname, COUNT(tbl_Contrat.Client) AS VehiculeTotal 
FROM tbl_Clients 
LEFT JOIN tbl_Contrat ON tbl_Contrat.Client = tbl_Clients.ID 
GROUP BY id, firstname, lastname 
+0

非常感謝!有效 ! – MHX 2014-11-04 23:04:24