2016-11-27 5 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

私はそれがすべきかなり確信しています's.count(*)'ではなく 'count(s。*)'でなければなりません。 – 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(*)を使用しています。これはエラーの原因の1つになります。

また、どのテーブルでもsmが別名として表示されません。ここにはいくつかの問題があります。

0

集約最初(でグループを逃すyour're)を作成し、その後、セールスマンのテーブルで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 
関連する問題