将2个mysql查询合并到一个具有唯一行的表中
我正在尝试完成一个查询,该查询显示每个项目的总计费小时数,格式如下:将2个mysql查询合并到一个具有唯一行的表中,mysql,inner-join,Mysql,Inner Join,我正在尝试完成一个查询,该查询显示每个项目的总计费小时数,格式如下: Project Name | Hours Project A | 2 Project B | 6 Project C | 8 我有两个SQL查询,计算每个项目的计费小时数。这是必要的,因为每个查询具有不同的联接: 例如,如果time_records.parent_type='Task',则连接为: INNER JOIN time_records ON time_records.parent_id =
Project Name | Hours
Project A | 2
Project B | 6
Project C | 8
我有两个SQL查询,计算每个项目的计费小时数。这是必要的,因为每个查询具有不同的联接:
例如,如果time_records.parent_type='Task',则连接为:
INNER JOIN time_records
ON time_records.parent_id = project_objects.id
INNER JOIN time_records
ON projects.id = time_records.parent_id
如果time_records.parent_type='Project',则联接为:
INNER JOIN time_records
ON time_records.parent_id = project_objects.id
INNER JOIN time_records
ON projects.id = time_records.parent_id
我试图将这两个查询合并到一个表中,但是我遇到的问题是该表重复项目,而不是将它们合并到每个项目的一个唯一行中(类似于透视表的功能)
以下是我当前的查询:
(SELECT projects.name AS expr1
, sum(time_records.value) AS expr2
FROM
project_objects
INNER JOIN projects
ON projects.id = project_objects.project_id
INNER JOIN time_records
ON time_records.parent_id = project_objects.id
WHERE
time_records.parent_type = 'Task'
GROUP BY
projects.name)
UNION ALL
(SELECT projects.name AS expr1
, sum(time_records.value) as expr2
FROM
projects
INNER JOIN time_records
ON projects.id = time_records.parent_id
WHERE
time_records.parent_type = 'Project'
GROUP BY
projects.name)
以下是它当前的输出方式:
Project Name | Hours
Project A | 2
Project B | 6
Project C | 8
Project A | 4
我需要项目A在一行上,显示6小时的值,而不是两行。我尝试了UNION操作,但是没有帮助。使用或条件连接 编辑: 看看这个:最有可能这将为美国工作。
你能试试看这个吗
SELECT X.expr1, SUM(X.expr2)
FROM
(SELECT
projects.name AS expr1
, sum(time_records.value) AS expr2
FROM project_objects
INNER JOIN projects
ON projects.id = project_objects.project_id
INNER JOIN time_records
ON time_records.parent_id = project_objects.id
WHERE time_records.parent_type = 'Task'
GROUP BY projects.name
UNION
SELECT
projects.name AS expr1
, sum(time_records.value) as expr2
FROM projects
INNER JOIN time_records
ON projects.id = time_records.parent_id
WHERE time_records.parent_type = 'Project'
GROUP BY projects.name) X
GROUP BY X.expr1
OP提到,根据上述条件,连接列是不同的。仅使用“或”是不够的。因此,使用时间分组\u记录。父\u类型也是。问题是,与父\u类型=“项目”相比,如果父\u类型=“任务”,则它会在不同的表中查找项目。因此,仅使用简单的或不会区分联接类型,对吗?该语句缺少“FROM projects”,这是第二个查询的一部分。每个查询都是从不同的表中选择数据,这就是这里的难点所在。