Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用总和聚合时需要ID列不区分_Mysql_Sql_Join_Aggregate Functions - Fatal编程技术网

Mysql 使用总和聚合时需要ID列不区分

Mysql 使用总和聚合时需要ID列不区分,mysql,sql,join,aggregate-functions,Mysql,Sql,Join,Aggregate Functions,哪个显示这个 SELECT s.EmployeeID,e.LastName,projectID,sum(s.HoursWorked) AS Total_Hours from TimeSheet s full join Employee e ON e.EmployeeID = s.EmployeeID full Join Project p ON p.ProjectID = e.EmployeeID group by p.ProjectID,s.EmployeeID,e.LastName 我希

哪个显示这个

SELECT s.EmployeeID,e.LastName,projectID,sum(s.HoursWorked) AS Total_Hours
from TimeSheet s
full join Employee e ON e.EmployeeID = s.EmployeeID
full Join Project p
ON p.ProjectID = e.EmployeeID 
group by p.ProjectID,s.EmployeeID,e.LastName
我希望项目ID显示为2个空值

更新:这几乎是我需要的

Employeid  Lastname        projectID    Sum(hoursWorked)
4          Peacock          NULL         33.00
5          Buchanan         NULL         44.00
1          Davolio          1            56.00
2          Fuller           2            41.00
3          Leverling        3            42.00
这就产生了

SELECT  COALESCE(et.EmployeeID, p.projectID) AS employeeID
,       e.LastName
,       COALESCE(p.projectID, et.EmployeeID) AS projectID
,       sum(s.HoursWorked) AS Total_Hours
from    TimeSheet s  
inner join Employee e ON e.EmployeeID = s.EmployeeID
inner join EmployeeTask et on e.EmployeeID = et.EmployeeID
inner join Task t On t.TaskID=et.TaskID
inner join Project p on p.ProjectID=t.ProjectID 
group by p.ProjectID, et.EmployeeID, e.LastName
这让我找到了这个链接

更新答案:然后我重写sql以获得正确答案

Employeid  Lastname        projectID    Sum(hoursWorked)
1          Davolio          1   112.00
2          Fuller           1   82.00
3          Leverling        2   84.00
4          Peacock          2   66.00
5          Buchanan         3   88.00

NULLs值表示这2名员工没有任何项目。换句话说,没有一个项目id为4,5,表示这两名员工没有任何项目。换句话说,没有id为4,5的项目可以使用此查询:

SELECT  COALESCE(et.EmployeeID, p.projectID) AS employeeID
,       COALESCE(p.projectID, et.EmployeeID) AS projectID
,       e.LastName
,       (Select sum(HoursWorked)
    FROm TimeSheet
    WHere TimeSheet.EmployeeID=e.EmployeeID
    )AS Total_Hours
from    TimeSheet s  
inner join Employee e ON e.EmployeeID = s.EmployeeID
inner join EmployeeTask et on e.EmployeeID = et.EmployeeID
inner join Task t On t.TaskID=et.TaskID
inner join Project p on p.ProjectID=t.ProjectID 
group by p.ProjectID, et.EmployeeID, s.EmployeeID,e.EmployeeID, e.LastName
因为您的projectid等于员工id,所以如果projectid的联接返回null,我们可以使用employeeid来代替

SELECT  COALESCE(et.EmployeeID, p.projectID) AS employeeID
,       COALESCE(p.projectID, et.EmployeeID) AS projectID
,       e.LastName
,       (Select sum(HoursWorked)
    FROm TimeSheet
    WHere TimeSheet.EmployeeID=e.EmployeeID
    )AS Total_Hours
from    TimeSheet s  
inner join Employee e ON e.EmployeeID = s.EmployeeID
inner join EmployeeTask et on e.EmployeeID = et.EmployeeID
inner join Task t On t.TaskID=et.TaskID
inner join Project p on p.ProjectID=t.ProjectID 
group by p.ProjectID, et.EmployeeID, s.EmployeeID,e.EmployeeID, e.LastName

由于您的projectid等于员工id,因此如果projectid的联接返回null,我们可以使用数据库结构中的employeeid,我假设一名员工正在为一个项目工作,并且所有时间表仅为该项目注册。我个人认为这不是一个好的数据库设置。它可能不用于在real project中存储真实数据。

根据您的数据库结构,我假设一名员工正在为一个项目工作,并且所有时间表仅为该项目注册。我个人认为这不是一个好的数据库设置。它可能不用于在real project中存储真实数据。

p.projectd=e.EmployeeID
有点可疑。首先,这意味着一个项目最多只能有一名员工工作。你是对的,所以当我通过其他表连接表时,我有点怀疑。首先,这意味着最多一名员工可以处理一个项目。你是对的,所以我在通过其他表连接表时,给出了projectID 4和projectID 5,没有任何projectID具有该值。员工id 1和2是项目id 1,员工id 2和3是项目id 2,员工id 3是项目id 3这让我大吃一惊,仍然存在ProjectID和employeeID之间的单一连接问题,我解决了这个问题。这给出了ProjectID 4和5,并且没有任何具有该值的ProjectID。员工id 1和2是项目id 1,员工id 2和3是项目id 2,员工id 3是项目id 3这让我大吃一惊,ProjectID和employeeID之间仍然存在单一连接的问题,我解决了这个问题。