2016-11-27 78 views
0

我有一个任务,选择一个推销员的姓名和ID,并计算他们在2010年FireBird 2.5中销售的汽车数量。这里是数据库:我该如何选择别的东西

Salesman(salesmanID:int primary key, salesmanName:char(20), SalesmanSurname:char(20)) 
sale (SalesDate:Date, SalesmanID:foreignkey to salesman) 

我试过这个:

select s.count(*), sm.salesmanID, sm.salesmanName, sm.SalesmanSurname 
from sale s inner join salesman on s.salesmanID=sm.salesmanID 
where SalesDate between '1.1.2010' and '31.12.2010'; 

和错误我得到的是:

Statement failed, SQLSTATE = 42000 
Dynamic SQL Error 
-SQL error code = -104 
-Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause) 
+0

我敢肯定这应该'count(s。*)',而不是's.count(*)'。 – melpomene

回答

1

以这种方式工作

SELECT 
    count(*), 
    sm.salesmanID, 
    sm.salesmanName, 
    sm.SalesmanSurname 
FROM 
    sale s 
INNER JOIN salesman sm ON s.salesmanID = sm.salesmanID 
WHERE 
    s.SalesDate BETWEEN '1.1.2010' 
AND '31.12.2010' 
GROUP BY 
    sm.salesmanID, 
    sm.salesmanName, 
    sm.SalesmanSurname 
+0

这解决了我的问题,谢谢 – Brane

0

您正在使用s.count(*)这不是一个有效的语法。这可能是你得到错误的原因之一。

此外,我没有看到sm作为任何表的别名。这里找到了很多问题。

0

使聚合第一(your're缺少GROUP BY),然后加入与推销员表TEH结果:

select s.salescount, s.salesmanID , sm.salesmanName, sm.SalesmanSurname from 
(select count(*) as salescount, salesmanID 
FROM sale where SalesDate between '1.1.2010' and '31.12.2010' 
    group by salesmanID) as s inner join salesman sm on s.salesmanID=sm.salesmanID 
相关问题