2014-11-04 87 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