在mysql中使用内部联接在同一个表中添加不同的列

在mysql中使用内部联接在同一个表中添加不同的列,mysql,Mysql,我想做一份特定项目的时间记录报告。我试着在下面提问 表1:项目 id | Name ------------ 1 | A 2 | B 表2:EmployeeTimeEntry proj | activity |time ---------------------- 1 | coding | 5 2 | coding | 2 1 | testing | 2 1 | coding | 2 我对项目A的期望输出: proj |

我想做一份特定项目的时间记录报告。我试着在下面提问

表1:项目

id   | Name
------------
1    |  A
2    |  B
表2:EmployeeTimeEntry

proj | activity  |time
----------------------
1    | coding    | 5
2    | coding    | 2
1    | testing   | 2
1    | coding    | 2
我对项目A的期望输出:

proj  | TotalDur  | activity | Activitytime
--------------------------------------------
A     |  9        | coding   |  7
A     |  9        | testing  |  2
我的问题是:

$query = "SELECT        
    name  as 'Proj',        
    TimeEntry.Total as 'TotalDur',
    ATimeEntry.ADetails as 'activity',
    ATimeEntry.ATotal as 'Activitytime'             
    FROM Projects pr

    INNER JOIN(SELECT project,SUM(time) as Total from EmployeeTimeEntry group by project ) TimeEntry on pr.id = TimeEntry.project
    INNER JOIN(SELECT project,details as ADetails,SUM(time) as ATotal from EmployeeTimeEntry where id = pr.id group by details ) ATimeEntry on pr.id = TimeEntry.project";
但我得到的结果是

proj  | TotalDur  | activity | Activitytime
--------------------------------------------
A     |  9        | coding   |  9
A     |  9        | testing  |  2
添加所有项目的所有活动时间。
我使用combobo选择要显示报告的项目。

也许这就是您想要的

select 
    p.Name as Proj, 
    (select sum(time) as TotalDur from EmployeeTimeEntry where proj = p.id group by proj) TotalDur, 
    activity, 
    sum(e.time) as ActivityTime 
from Projects p
inner join EmployeeTimeEntry e on e.proj = p.id
where p.Name = 'A'
group by name, activity, p.id

我认为你把事情复杂化了

select
p.name as Proj,
x.TotalDur,
et.activity,
sum(et.time) as Activitytime
from Projects p
join (
   select proj, sum(time) as TotalDur from EmployeeTimeEntry group by proj
)x on x.proj = p.id
join EmployeeTimeEntry et on et.proj = p.id
where p.name = 'A'
group by p.name,et.activity

$query=选择p.name作为项目,x.TotalDur,et.details,SUMet.date\U end作为活动时间从项目p加入选择项目,SUMdate\U end作为TotalDur从EmployeeTimeEntry组按项目x在x.project=p.id加入EmployeeTimeEntry et在et.project=p.id,其中p.name='Project1'组按p.name,等等详细信息;我的查询是这样的,但在最终报告中没有显示任何内容。我的查询与SQLFiddle配合得很好。可能是我的代码中缺少了一些内容。我不太明白您所说的。我们是否可以将变量指定给where子句,而不是像where p.id=et.proj这样的字符串,因为我将此查询作为字符串发送给另一个函数。我使用相同的查询来显示所有项目。i、 e proj A和proj B。是的,您可以使用where p.name='A'接受变量名。这将根据输入值过滤掉结果。