SQL语句总计所有员工记录

时间:2014-12-15 23:04:57

标签: sql-server sql-server-2008

我有一个缺少所有员工姓名的sql语句。

表employee_list包含公司的所有员工。

表应用包含分配给应用的员工

表详细信息包含订单的总金额

我的查询不会对没有任何应用的员工进行分组和总计。例如,员工约翰有5个应用程序,250美元,比尔有2个应用程序75美元,亨利有0个应用程序0美元(亨利的应用程序或详细信息表中没有行。)

我的查询返回:

John   5   250.00
Bill   2    75.00

我需要它返回

John   5   250.00
Bill   2    75.00
Henry  0     0.00

有什么想法吗?这是我目前的代码

SELECT employee_list.Fullname, count(apps.acntnum), sum(details.cost) FROM employee_list left join apps on employee_list.Fullname=apps.EmployeeName LEFT JOIN details ON (apps.ID=details.ObjOwner_ID AND details.Active=1) Group BY employee_list.Fullname

2 个答案:

答案 0 :(得分:2)

重要的是要使用employee_list表中的LEFT JOIN以及您要加入的任何后续表,并且不要做任何会从右侧表中过滤掉NULL的事情(因为NULL将用于'缺少'行。)

您的查询没问题,但我怀疑您在更广泛的查询中使用它,在那里您可能无意中有一个INNER JOIN或提到WHERE子句中的一个列。

答案 1 :(得分:0)

我同意所有其他答案,但是,你也可以尝试这个....

SELECT employee_list.Fullname,
(SELECT count(apps.acntnum) FROM apps WHERE employee_list.Fullname=apps.EmployeeName) AS Cnt,
(SELECT sum(details.cost) FROM apps LEFT JOIN details ON (apps.ID=details.ObjOwner_ID AND details.Active=1) WHERE employee_list.Fullname=apps.EmployeeName) AS cost
FROM employee_list

这将始终返回完整的员工列表,并分别对其他值进行计数/求和。 这个答案没有考虑到绩效。